数据库约束

一、主键

添加主键三种方法:

1)创建表:

1 CREATE TABLE test01 (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(20))

2)也是创建表的时候添加,但是添加位置为约束区域。所谓约束区域就是字段定义完之后的代码位置。

1 CREATE TABLE test02 (id INT AUTO_INCREMENT ,username VARCHAR(22),PRIMARY KEY(id))

3)是创建表之后,直接修改表进行主键创建:

1 CREATE TABLE test03(id INT  ,username VARCHAR(22));
1     ALTER TABLE test03 ADD PRIMARY KEY(id);

 4)truncate  和delete

  1、truncate  是删除表,重新创建表。属于DDL(Data Definition Language 数据库定义语言)

    delete属于清空原先的记录。属于DML(Data Manipulation Language 数据库操作语言)

  2、delete from属于删除表中的原先的记录,逐条进行删除,再次插入会接着之前的ID值的。

1         SELECT * FROM test01;
2         INSERT INTO  test01(username) VALUES("tom");
3         DELETE FROM test01;
4         INSERT INTO  test01(username) VALUES('ok')

  

而truncate 是直接删除表,之后继续创建新的表。

5)auto_creatment 需要满足以下条件:

   1、被修饰的字段必须支持自增,一般是int类型

1 CREATE TABLE test04(
2 id VARCHAR(22) AUTO_INCREMENT,
3 usrername VARCHAR(333)
4 )

 

  报错:Incorrect column specifier for column 'id'

  2、被修饰的字段,一般作为表的key,一般是primary key

1 CREATE TABLE test04 (
2   id INT AUTO_INCREMENT,
3    usrername VARCHAR(333)
4 )

 

  报错:Incorrect table definition; there can be only one auto column and it must be defined as a key

6)一对多:

在我们日常中经常会出现一对多的场景,比如说,用户订单和用户之间的关系就是一对多的关系,多的是订单(多表),一是用户。在实际生产环境中,有一些不建立外键,(处于维护角度)通过程序来控制逻辑关系。还有一种通过外键关系来创建之间关系。

我们一般在多表中建立外键约束。

语法:

alter table 多表名称 add  foreign key (外键名称) references  表名称(主键)

ALTER TABLE orders ADD  FOREIGN KEY(user_id) REFERENCES users(id)

 

 1 CREATE TABLE users (
 2 id INT  AUTO_INCREMENT ,
 3 username  VARCHAR(33),
 4 PRIMARY KEY(id)
 5 )
 6 
 7 INSERT INTO users(username) VALUES('ok')
 8 
 9 SELECT * FROM users;
10 
11 CREATE  TABLE orders(
12 id INT AUTO_INCREMENT PRIMARY KEY,
13 totalprice DOUBLE
14 )
15 
16 
17 ALTER TABLE orders ADD COLUMN user_id INT;

多表插入不存在user_id 的时候,出现Cannot add or update a child row: a foreign key constraint fails (`test`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))错误。

插入存在的userid的话。

删除可以正常删除:DELETE FROM orders WHERE user_id=1;

 

posted @ 2018-06-14 18:45  evil_liu  阅读(216)  评论(0编辑  收藏  举报