首页 > 代码库 > DML

DML

添加和完整约束

增加: insert into 表名 (字段列明集合) values(值得集合) ;

* 要保证数据的正确性和完整性

完整性约束:

* 主键一条数据在数据库中的唯一标识, 特点: 非空唯一 primary key

* 主键自增长如果主键的是int,那么如果给主键赋值为null , 会自动根据上一条记录的值+1 ; primary key aoto_increment

* 唯一 unique

* 非空 not null

* 外键

 


外键约束

外键约束: 一张表的主键作为另一张表的外键,就保证数据的完整性

* 注意事项: 主键必须和外键的数据类型一致,名称可以不一致

表和表之间的关系

* 一对一的关系主外键可以在任意一方

* 一对多或者多对一的关系外键添加到多的一方

* 多对多的关系定义中间表,中间表的两个字段都是外键,分别用于关联两个表的主键

 


删除和修改

删除: delete from 表名 [where 条件] ;

* delete from 表名 ; -- 删除所有的数据逐行删除

* truncate table 表名 ; -- 删除所有的数据(直接把表删除然后在在创建表)

修改: update 表名 set 字段名 = 字段值 , 字段名 = 字段值 , ... [where 条件] ;

 


案例:

-- 创建数据库

create databases mydb ;

-- 查询所有数据库名称

show databases ;

-- 删除数据库

drop database stu;

-- 选择使用的数据库

use day02;

-- 创建表

create table student(

-- 字段名数据类型

sid INT ,

sname VARCHAR(20),

gender CHAR(1),

score DOUBLE(4,2),

birthday TIMESTAMP

 

);

-- 查看表名称

show tables ;

-- 删除表

drop table stu;

-- 查看表结构

desc student;

-- 修改表结构

-- 修改之添加列:给stu表添加classname列:

Alter table student add classname vercar(100);

 

-- 修改之修改列类型:修改stu表的gender列类型为char(2)

ALTER TABLE student MODIFY gender CHAR(2);

-- 修改之修改列名:修改stu表的gender列名为sex

ALTER TABLE student CHANGE sex gender CHAR(1);

 

-- 修改之删除列:删除stu表的classname列:

ALTER TABLE student DROP classname;

-- 修改表名称

ALTER TABLE student RENAME TO tb_student;

 

DESC tb_student;

-- 插入数据

INSERT INTO tb_student(sid,sname,gender,score,birthday) VALUES(1,‘风清扬‘,‘‘,99.99,‘1998-11-11‘);

INSERT INTO tb_student(sid,sname,gender,score,birthday) VALUES(2,‘岳不群‘,‘‘,88.99,NULL);

INSERT INTO tb_student(sid,sname) VALUES(3,‘貂蝉‘);

INSERT INTO tb_student VALUES(4,‘吕布‘,‘‘,88.99,NULL);

-- 删除数据

DELETE FROM tb_student WHERE sname = ‘貂蝉‘;

-- 查询数据

SELECT * FROM tb_student;

-- 清空表中所有记录

TRUNCATE TABLE tb_student;

-- 先删除表

DROP TABLE tb_student;

-- 再创建一张空表

CREATE TABLE tb_student(

-- 字段名数据类型

sid INT ,

sname VARCHAR(20),

gender CHAR(1),

score DOUBLE(4,2),

birthday TIMESTAMP

);

-- 修改数据

UPDATE

tb_student

SET

gender = ‘‘,

score = 12.88

WHERE

sid = 2;

-- 创建emp

CREATE TABLE emp(

empno INT, -- 员工编号

ename VARCHAR(50), -- 员工姓名

job VARCHAR(50), -- 员工工种

mgr INT, -- 领导编号

hiredate DATE, -- 入职日期

sal DECIMAL(7,2), -- 工资

comm DECIMAL(7,2), -- 奖金

deptno INT -- 部门编号

) ;

-- 添加数据

INSERT INTO emp VALUES(7369,‘SMITH‘,‘CLERK‘,7902,‘1980-12-17‘,800,NULL,20);

INSERT INTO emp VALUES(7499,‘ALLEN‘,‘SALESMAN‘,7698,‘1981-02-20‘,1600,300,30);

INSERT INTO emp VALUES(7521,‘WARD‘,‘SALESMAN‘,7698,‘1981-02-22‘,1250,500,30);

INSERT INTO emp VALUES(7566,‘JONES‘,‘MANAGER‘,7839,‘1981-04-02‘,2975,NULL,20);

INSERT INTO emp VALUES(7654,‘MARTIN‘,‘SALESMAN‘,7698,‘1981-09-28‘,1250,1400,30);

-- 查询所有列数据

SELECT * FROM emp;

SELECT empno,ename,job FROM emp;

-- 结果集

-- 查询工资是800块的员工信息

SELECT * FROM emp WHERE sal = 800;

-- 查询工资大于等于2500的员工信息

SELECT * FROM emp WHERE sal >= 2500;

-- 查询工资小于等于2500的员工信息

SELECT * FROM emp WHERE sal <= 2500;

-- 查询员工资在1500 2500 之间

SELECT * FROM emp WHERE sal >= 1500 AND sal <=2500;

-- 查询员工资在1500 2500 之间

SELECT * FROM emp WHERE sal BETWEEN 1500 AND 2500;

-- 查询员工工资是1000 或者2000的人

SELECT * FROM emp WHERE sal = 800 OR sal = 5000;

-- 查询员工工资是1000 或者2000的人

SELECT * FROM emp WHERE sal IN(800,5000);

-- 查询员工工资不是800

SELECT * FROM emp WHERE sal != 800;

SELECT * FROM emp WHERE sal <> 800;

-- 查询有奖金的员工信息

SELECT * FROM emp WHERE comm IS NOT NULL;

-- 查询没有有奖金的员工信息

SELECT * FROM emp WHERE comm IS NULL;

-- 查询姓s的用户

SELECT * FROM emp WHERE ename LIKE ‘s%‘;

-- 查询姓名第三个字符是I的用户

SELECT * FROM emp WHERE ename LIKE ‘__I%‘;

-- 查询名字有五位的用户

SELECT * FROM emp WHERE ename LIKE ‘_____‘;

-- 查询名字包含A的用户

SELECT * FROM emp WHERE ename LIKE ‘%A%‘;

-- 起别名

SELECT ename 姓名,sal AS 工资, comm AS 奖金 FROM emp;

SELECT e.ename,e.job FROM emp e;

-- 计算

SELECT ename , sal , comm , (sal+IFNULL(comm,0)) 月薪 FROM emp;

-- 去除重复记录

SELECT DISTINCT sal FROM emp;


 

DML