创建数据表
Mysql 创建数据表的语法格式
创建数据表的基础语法:CREATE DATABASE <数据表名称> (<字段名称> <数据类型> [完整性约束]);
数据类型
数字类型
- 整数:
tinyint、smallint、mediumint、int、bigint; - 小数:小数分为浮点数类型和定点数类型。
- 浮点数:
float(单精度浮点数)、double(双精度浮点数); - 定点数:
decimal和numeric,一般用于类似货币等的计算,以decimal举例,其声明格式是DECIMAL (M, D),M是精度,表示一共存储多少位数,D是小数位数,小数位数会被四舍五入。
- 浮点数:
- 日期/时间类型:分为
year、time、date、datetime、timestamp,其中timestamp是时间戳,如果未填入有效数据,默认填充服务器当前时间戳。 - 字符串:
char (M)、varchar (M)、binary (M)、varbinary (M)、blob (M)、text、enum(枚举)、set(枚举)。
查看数据表格的结构
查看数据表格的结构:DESCRIBE <数据表>;,其可以等价为:DESC <数据表>;
mysql> DESCRIBE sourse;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| cno | char(10) | YES | | NULL | |
| cname | varchar(30) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.63 sec)
Field:字段名称Type:数据类型Null:是否为空Key:主键Default:字段的默认值Extra:附加信息
查看建表的命令的代码
查看建表的命令的代码:SHOW CREATE TABLE <数据表名称>; (可以用\G 替代分号,会更美观,如SHOW CREATE TABLE <数据表名称>\G,但是/G是MySQL命令行客户端的特殊命令,不能在SQL语句中使用。)
mysql> SHOW CREATE TABLE student;
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
`sno` char(9) DEFAULT NULL,
`class` varchar(30) DEFAULT NULL,
`sname` varchar(10) DEFAULT NULL,
`ssex` char(2) DEFAULT NULL,
`birth` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.32 sec)
表的修改
对于表的操作,均需要ALTER TABLE <数据表名称>
RENAME:重命名数据表,ALTER TABLE <数据表名称> RENAME [(AS | TO)] <新的数据表名称>;MODIFY:操作字段,例如修改字段数据结构,ALTER TABLE <数据表名称> MODIFY <字段名称> <数据类型>;,修改字段的位置,ALTER TABLE <数据表名称> MODIFY <字段名称> <数据类型> [(FIRST | AFTER) <字段名称>];CHANGE:修改字段名称,ALTER TABLE <数据表名称> CHANGE <字段名称> <新的字段名称> <数据类型>;,如果不希望修改数据类型,则新的数据类型填写原始数据类型。ADD:添加字段,ALTER TABLE <数据表名称> ADD <字段名称> <数据类型>[(FIRST | AFTER) <字段名称>];DROP:删除字段,ALTER TABLE <数据表名称> DROP <字段名称>;
完整性约束
NOT NULL或NULL:非空/空约束,指的是该字段是否允许空值,如果不写则默认NULL,即允许空值(空值不是0,而是无数据);DEFAULT:默认值约束,指的是设置字段的默认值,如果在记录中不存在,则默认提供一个数值;AUTO_INCREMENT:自增约束,当主键定义为自增后,这个主键就不需要录入数据,而DBMS会自动根据定义自动赋值,每增长一条记录,主键就会随着步长(步长默认为1)进行增长;UNIQUE [KEY]:唯一约束,唯一约束在单表中可以存在多个被唯一约束的字段,且唯一约束允许存在空值;[PRIMARY] KEY:主键约束,在字段中唯一且不为空;CHECK_CONSTRAINT_DEFINITION:检查约束,用来检查数据表中,字段的值是否是有效合法的。
一个数据表中只可以存在一个主键约束(**[PRIMARY] KEY**),其他约束可以存在多个。
修改数据库的字符集
查看建库的命令:SHOW CREATE DATABASE <数据库名>;
mysql> SHOW CREATE DATABASE chjgl_db_20260325;
+-------------------+------------------------------------------------------------------------------------------------------------------+
| Database | Create Database |
+-------------------+------------------------------------------------------------------------------------------------------------------+
| chjgl_db_20260325 | CREATE DATABASE `chjgl_db_20260325` /*!40100 DEFAULT CHARACTER SET utf8mb3 */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+-------------------+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.43 sec)
修改数据库的字符集:ALTER DATABASE <数据库名> DEFAULT CHARACTER SET <字符集>;
mysql> ALTER DATABASE chjgl_db_20260325 DEFAULT CHARACTER SET utf8mb4;
Query OK, 1 row affected (0.28 sec)
创建数据库的时候同步设置其默认字符串:CREATE DATABASE <数据库名> DEFAULT CHARACTER SET <字符集>;
mysql> CREATE DATABASE mytest_db DEFAULT CHARACTER SET utf8mb4;
Query OK, 1 row affected (0.18 sec)
mysql> SHOW CREATE DATABASE mytest_db;
+-----------+-------------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database |
+-----------+-------------------------------------------------------------------------------------------------------------------------------------+
| mytest_db | CREATE DATABASE `mytest_db` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+-----------+-------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.29 sec)
主键的设置
联合主键的设置
含有联合主键的数据表,创建时候与正常创建同理,但是使用PRIMARY KEY (<联合主键的字段>)设置联合主键,即:CREATE TABLE <表名称> (<需要创建的字段>, PRIMARY KEY(<联合主键的字段>));
- 联合主键的创建
PRIMARY KEY必须完整书写! - 联合主键创建时,不可以直接在字段后申明主键约束!
- 一张表只能有一个主键,联合主键也是一个主键。
举例如下:
mysql> CREATE TABLE scores (sno char(9), cno char(10), score int, PRIMARY KEY(sno, cno));
Query OK, 0 rows affected (0.32 sec)
mysql> DESC scores;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| sno | char(9) | NO | PRI | NULL | |
| cno | char(10) | NO | PRI | NULL | |
| score | int | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.53 sec)
删除主键
删除主键是对数据表进行操作,所以需要使用ALTER TABLE,完整格式是:ALTER TABLE <表名> DROP PRIMARY KEY;
因为一个数据表只有一个主键,所以直接输入PRIMARY KEY即可删除主键。这里的PRIMARY KEY也必须完整输入。
mysql> DESC scores;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| sno | char(9) | NO | PRI | NULL | |
| cno | char(10) | NO | PRI | NULL | |
| score | int | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.37 sec)
mysql> ALTER TABLE scores DROP PRIMARY KEY;
Query OK, 0 rows affected (0.26 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC scores;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| sno | char(9) | NO | | NULL | |
| cno | char(10) | NO | | NULL | |
| score | int | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.36 sec)
添加主键
主键在一张数据表中只可以有一个。
使用:ALTER TABLE <表名> MODIFY <字段> <数据类型> [约束条件];,或者ALTER TABLE <表名> ADD PRIMARY KEY (<字段>);,后者适用于联合主键。
mysql> ALTER TABLE student MODIFY sno char(9) PRIMARY KEY;
Query OK, 0 rows affected (0.26 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE scores ADD PRIMARY KEY(sno, cno);
Query OK, 0 rows affected (0.23 sec)
Records: 0 Duplicates: 0 Warnings: 0