2018-04-20-2章-数据表的操作

mysql-数据表的操作

概述

数据表(或称表)时数据库最重要的组成部分之一,是其他对象的基础.

USE

  • 打开数据库
  • USE 数据库名称

2-6 创建数据表

(数据表创建的时候一定不能脱离实际的项目)

CREATE TABLE [IF NOT EXISTS] table_name(

​ column_name data_type,

​ …

)

mysql> create table user(
    -> username varchar(20),
    -> age tinyint unsigned,
    -> salary float(8,2) unsigned
    -> );
Query OK, 0 rows affected (0.09 sec)

年龄和薪资 不可能为负值,所以设无符号值。

2-7 查看数据表

SHOW TABLES [FROM db_name]

[LIKE ‘pattern’ |WHERE expr]

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)


2-8 查看数据表结构

SHOW COLUMNS FROM tbl_name

mysql> show columns from `user`;
+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20)         | YES  |     | NULL    |       |
| age      | tinyint(3) unsigned | YES  |     | NULL    |       |
| salary   | float(8,2) unsigned | YES  |     | NULL    |       |
+----------+---------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

2-9 mysql添加和删除字段

mysql> alter table test add t_extract varchar(30);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc test;

+-----------+---------------------+------+-----+---------+----------------+
| Field     | Type                | Null | Key | Default | Extra          |
+-----------+---------------------+------+-----+---------+----------------+
| t_id      | tinyint(3) unsigned | NO   | PRI | NULL    | auto_increment |
| t_name    | varchar(20)         | YES  |     | NULL    |                |
| t_extract | varchar(30)         | YES  |     | NULL    |                |
+-----------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> alter table test drop column t_extract;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test;
+--------+---------------------+------+-----+---------+----------------+
| Field  | Type                | Null | Key | Default | Extra          |
+--------+---------------------+------+-----+---------+----------------+
| t_id   | tinyint(3) unsigned | NO   | PRI | NULL    | auto_increment |
| t_name | varchar(20)         | YES  |     | NULL    |                |
+--------+---------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

2-10 mysql记录的插入与查找

INSERT

插入记录

INSERT [INTO] tbl_name [(col_name,…)] VALUES(val,…)

省略了字段col_name,代表给所有的字段赋值

mysql> insert `user` values('xiaoming',25,8765.25);
Query OK, 1 row affected (0.01 sec)

也可以给指定字段赋值

mysql> insert `user`(username,age) values('xiaofang',22);
Query OK, 1 row affected (0.04 sec)

查看表的记录

SELECT expr,… FROM tbl_name

注意select * 这个星号其实是对字段的过滤并不是对记录的过滤

mysql> select * from `user`;
+----------+------+---------+
| username | age  | salary  |
+----------+------+---------+
| xiaoming |   25 | 8765.25 |
| xiaofang |   22 |    NULL |
+----------+------+---------+
2 rows in set (0.00 sec)

2-11 MySQL空值与非空

空值与非空

  • NULL , 字段值可以为空
  • NOT NULL,字段值禁止为空
mysql> create table user2(
    -> username varchar(20) not null,
    -> age tinyint unsigned null
    -> );
Query OK, 0 rows affected (0.09 sec)

mysql> show columns from user2;
+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20)         | NO   |     | NULL    |       |
| age      | tinyint(3) unsigned | YES  |     | NULL    |       |
+----------+---------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

创建 一张表 user2  并设置字段 username 非空, age 可以为空

现在插入数据测试并查看结果

mysql> insert `user2` (username,age) values('宇智波佐助',null);
Query OK, 1 row affected (0.01 sec)

mysql> select * from `user2`;
+-----------------+------+
| username        | age  |
+-----------------+------+
| 宇智波佐助      | NULL |
+-----------------+------+
1 row in set (0.00 sec)


2-12 mysql 自动编号

AUTO_INCREMENT

  • 自动编号,且必须与主键组合使用
  • 默认情况下,起始值唯1,每次增加量为1
mysql> create table `user3`(
    -> id smallint unsigned auto_increment,
    -> username varchar(30) not null
    -> );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

必须与主键联合使用否则会报错

2-13 涉及主键约束

PRIMARY KEY

  • 主键约束
  • 每张数据表只能存在一个主键
  • 主键保证记录的唯一性
  • 主键自动为NOT NULL
mysql> create table `user3`(
    -> id smallint unsigned primary key auto_increment,
    -> username varchar(30) not null
    -> );
Query OK, 0 rows affected (0.07 sec)

查看表的字段

mysql> show columns from `user3`;
+----------+----------------------+------+-----+---------+----------------+
| Field    | Type                 | Null | Key | Default | Extra          |
+----------+----------------------+------+-----+---------+----------------+
| id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(30)          | NO   |     | NULL    |                |
+----------+----------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)




插入记录

mysql> insert `user3` (username) values('漩涡鸣人');
Query OK, 1 row affected (0.01 sec)

mysql> insert `user3` (username) values('春野樱');
Query OK, 1 row affected (0.01 sec)

mysql> insert `user3` (username) values('宇智波佐助');
Query OK, 1 row affected (0.04 sec)

查看表的记录是否自增
mysql> select * from `user3`;
+----+-----------------+
| id | username        |
+----+-----------------+
|  1 | 漩涡鸣人        |
|  2 | 春野樱          |
|  3 | 宇智波佐助      |
+----+-----------------+
3 rows in set (0.01 sec)

2-14 初涉唯一约束

UNIQUE KEY

  • 唯一约束
  • 唯一约束可以保证字段的唯一性
  • 唯一约束的字段可以为空值(NULL)
  • 每张数据表可以存在多个唯一键
mysql> create table `user5`(
    -> id smallint unsigned primary key auto_increment,
    -> username varchar(20) not null unique key,                                                                  
    -> age tinyint unsigned
    -> );
Query OK, 0 rows affected (0.08 sec)

创建一个包含主键和唯一键 的表

往表里面唯一字段插入记录,相同记录再次插入error提示Duplicate(重复);
mysql> insert `user5`(username,age) values('漩涡玖辛奈',30);
Query OK, 1 row affected (0.00 sec)

mysql> insert `user5`(username,age) values('漩涡玖辛奈',30);
ERROR 1062 (23000): Duplicate entry '漩涡玖辛奈' for key 'username'

2-15 初涉默认约束

DEFAULT

  • 默认值
  • 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值
mysql> create table `user6`(
    -> id tinyint unsigned primary key auto_increment,
    -> username varchar(20) not null,
    -> sex enum('1','2','3') default '3'
    -> );
Query OK, 0 rows affected (0.10 sec)

mysql> show columns from `user6`;
+----------+---------------------+------+-----+---------+----------------+
| Field    | Type                | Null | Key | Default | Extra          |
+----------+---------------------+------+-----+---------+----------------+
| id       | tinyint(3) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)         | NO   |     | NULL    |                |
| sex      | enum('1','2','3')   | YES  |     | 3       |                |
+----------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)


当插入记录没有明确复制,sex字段就会赋默认值

mysql> insert `user6` (username) values('旗木卡卡西');
Query OK, 1 row affected (0.00 sec)

mysql> select * from `user6`;
+----+-----------------+------+
| id | username        | sex  |
+----+-----------------+------+
|  1 | 旗木卡卡西      | 3    |
+----+-----------------+------+
1 row in set (0.01 sec)

猜你喜欢

转载自blog.csdn.net/github_38970218/article/details/88616490