当前位置: 首页>数据库>正文

mysql schema 建表 数量限制 mysql建表key

数据库中表的操作


创建表:create table + 表名



mysql> create table student(
    -> id int(10),
    -> name varchar(20),
    -> age int(5),
    -> primary key(id)
    -> );
Query OK, 0 rows affected (0.10 sec)

约束


  • 约束是表级的强制规定,约束放置在表中删除有关联关系的数据,对数据库中表的字段的值加的一些限制和保护,是对数据保护的最后一道屏障。
  • 约束条件与数据类型的宽度一样,都是可选参数
  • 作用:用于保证数据的完整性一致性

五种约束:



  • PRIMARY KEY (PK) :标识该字段为该表的主键,可以唯一的标识记录。
  • FOREIGN KEY (FK) :标识该字段为该表的外键
  • NOT NULL :标识该字段不能为空
  • UNIQUE KEY (UK) :标识该字段的值是唯一的。
  • AUTO_INCREMENT :标识该字段的值自动增长(整数类型,而且为主键)。
  • DEFAULT :为该字段设置默认值
  • UNSIGNED :无符号
  • ZEROFILL :使用0填充

【是否允许为空,默认为NULL,可设置NOT NULL;若字段不允许为空,必须赋值】



【字段是否有默认值,缺省的默认值是NULL,若插入记录时不给字段赋值,此字段使用默认值】




非空约束



  • 保证列值不能为空;只能定义在列级。
  • 创建表的时候设置非空约束。



mysql> create table test1(
    -> id int(10),
    -> name varchar(20) not null
    -> );
Query OK, 0 rows affected (0.11 sec)



主键约束



  • 一张表只能有一个主键约束,主键约束可以由多个字段构成(联合主键和复合主键)。
  • 如果对表中某个字段加主键约束,则这个字段非空并且唯一
  • 在创建表的时候设置主键。

修改表结构增加主键:alter table 表名 add constraint [主键名称] primary key (主键字段)



mysql> create table test2( 
    -> id int(5) primary key,
    -> name varchar(15)
    -> );
Query OK, 0 rows affected (0.03 sec)



唯一约束



  • 设置字段值的唯一性(不可重复)。
  • 唯一约束和主键约束的区别:主键字段值必须是非空的。
  • 唯一约束允许有空值(只能出现一个),唯一约束允许有多个,主键约束每张表只能有一个。
  • 在创建表的时候设置唯一约束 Unique 。
mysql> create table test3( 
    -> id int(5) primary key,
    -> name varchar(20) unique,
    -> phone int(11) unique
    -> );
Query OK, 0 rows affected (0.08 sec)

外键约束(主从表)



  • CONSTRAINT 外键名称 FOREIGN KEY(字段) REFERENCES 外键依赖表名(依赖表中的相应字段)
  • ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(本表的外键字段) REFERENCES 外键依赖表名(依赖表中的相应字段)



        以学生信息表和班级表为例,class表中的sid为外键,student表中的id为主键,sid依赖于id,使两个表相关联。




mysql> create table student(
    -> id int(10) primary key,
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.01 sec)


mysql> create table class(
    -> class_id int(5) primary key,
    -> class_name varchar(10),
    -> sid int(10),
    -> constraint fk_stu_sid foreign key(sid) references student(id)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(10)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> desc class;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| class_id   | int(5)      | NO   | PRI | NULL    |       |
| class_name | varchar(10) | YES  |     | NULL    |       |
| sid        | int(10)     | YES  | MUL | NULL    |       |
+------------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)



自动增长列




        对于一些主键约束的字段(如 id)一般从1开始插入,不断增加,添加数据时比较繁琐,每次都添加一个id字段值,容易出错。可以将id字段设置为自动增加,使用 AUTO_INCREMENT 关键字设置表字段值自动增加。

  • 将已经创建完成的表字段设置为自动增长列:
  • ALTER TABLE 表名 MODIFY 字段名 数据类型 PRIMARY KEY AUTO_INCREMENT;
mysql> create table test4(
    -> id int(5) primary key auto_increment,
    -> name varchar(20) not null,
    -> sex varchar(5)
    -> );
Query OK, 0 rows affected (0.11 sec)

修改表:



添加新字段:



alter table 表名 add 新字段名 新字段类型



mysql> desc test4;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(5)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
| sex   | varchar(5)  | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> alter table test4 add phone int(11);
Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test4;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(5)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
| sex   | varchar(5)  | YES  |     | NULL    |                |
| phone | int(11)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

修改字段(重命名)

alter table 表名 change 原名 新名 类型及约束;



mysql> desc test4;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(5)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
| sex   | varchar(5)  | YES  |     | NULL    |                |
| phone | int(11)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> alter table test4 change phone phone_number int(11) not null;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test4;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(5)      | NO   | PRI | NULL    | auto_increment |
| name         | varchar(20) | NO   |     | NULL    |                |
| sex          | varchar(5)  | YES  |     | NULL    |                |
| phone_number | int(11)     | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

修改字段(非重命名)(数据类型,大小)



alter table 表名 modify 字段名 修改数据类型(大小);




mysql> desc test4;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(5)      | NO   | PRI | NULL    | auto_increment |
| name         | varchar(20) | NO   |     | NULL    |                |
| sex          | varchar(5)  | YES  |     | NULL    |                |
| phone_number | int(11)     | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> alter table test4 modify sex varchar(6) not null;
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test4;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(5)      | NO   | PRI | NULL    | auto_increment |
| name         | varchar(20) | NO   |     | NULL    |                |
| sex          | varchar(6)  | NO   |     | NULL    |                |
| phone_number | int(11)     | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

删除字段



alter table 表名 drop 列名;




mysql> desc test4;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(5)      | NO   | PRI | NULL    | auto_increment |
| name         | varchar(20) | NO   |     | NULL    |                |
| sex          | varchar(6)  | NO   |     | NULL    |                |
| phone_number | int(11)     | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> alter table test4 drop sex;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test4;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(5)      | NO   | PRI | NULL    | auto_increment |
| name         | varchar(20) | NO   |     | NULL    |                |
| phone_number | int(11)     | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

删除表



drop table 表名;




注意:



  • 数据和结构都被删除
  • 所有正在运行的相关事物被提交
  • 所有相关索引被删除
  • DROP TABLE 语句不能回滚
mysql> desc test4;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(5)      | NO   | PRI | NULL    | auto_increment |
| name         | varchar(20) | NO   |     | NULL    |                |
| phone_number | int(11)     | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> drop table test4;
Query OK, 0 rows affected (0.02 sec)

mysql> desc test4;
ERROR 1146 (42S02): Table 'lianxi.test4' doesn't exist

查看表的创建语句show create table 表名;



mysql> show create table test3;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                              |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test3 | CREATE TABLE `test3` (
  `id` int(5) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `phone` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  UNIQUE KEY `phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)


https://www.xamrdz.com/database/6ua1924646.html

相关文章: