mysql基础语句

一、DML操作

数据操纵语言(DML)DML用于插入、修改、删除数据记录,包括如下SQL语句:

INSERT:添加数据到数据库中

UPDATE:修改数据库中的数据

DELETE:删除数据库中的数据

1.1 插入数据

1.1.1 语法

INSERT INTO 表名称 VALUES(值1,值2,......);
INSERT INTO 表名称 VALUES(值1,值2,......),(值1,值2,......),...;
INSERT INTO 表名称 (字段1,字段2,......) VALUES(值1,值2,......);
INSERT INTO 表名称 (字段1,字段2,......) VALUES(值1,值2,......),(值1,值2,......),.....;

1.1.2 说明

1、值列表(值1,值2,......)的顺序、个数与字段列表(字段1,字段2,......) 中字段的顺序、个数一致

(1)如果个数少了就报Column count doesn’t match value count

(2)如果VALUES前面的()中没有列出字段,那么默认就是为表中的所有字段赋值,那么个数与顺序与表结构中字段定义的一致

2、关于自增长列、默认值列、允许为NULL列的赋值

(1)如果字段列表列出了字段名,那么值列表中就要为其赋值,哪怕它是自增长列,有默认值列,可以为NULL值的列。

  • InnoDB表的自动增长列可以手动插入合适的值,但是插入的值如果是NULL或者0,则实际插入的将是自动增长后的值;
  • 如果列声明了“默认约束”那么对应的位置可以赋值具体的值,也可以使用“DEFAULT”,表示使用默认值;
  • 如果列允许了NULL值,那么可以为对应的字段可以赋值为具体值也可以赋值为NULL

(2)对于没有列出的字段,像自增列就自动赋值,像默认值列就自动赋默认值,像允许NULL的列就自动赋NULL值,但是非空列又没有提供默认值会自动赋值为对应数据类型的默认值,例如字符串赋值为空字符串,int赋值为0;

3、VALUES也可以写成VALUE,但是VALUES是标准写法

4、可以同时插入多行

5、如果插入从表的数据,要注意查看主表参照字段的值是否存在

6、值的位置可以是常量值、表达式、函数

1.1.3 示例

练习一

建表
CREATE TABLE t_stu(
	sid INT PRIMARY KEY AUTO_INCREMENT,
	sname VARCHAR(100) NOT NULL,
	gender CHAR NOT NULL DEFAULT '男',
	card_id CHAR(18) NOT NULL UNIQUE,
	birthday DATE,
	address VARCHAR(200)
);
插入数据
INSERT INTO t_stu VALUES(1,'张三',DEFAULT,'123456789012345678','1989-09-09',NULL);
INSERT INTO t_stu VALUES(2,'李四','女','123456789012345677','1988-09-09','尚硅谷');
INSERT INTO t_stu VALUES(0,'王五','男','123456789012345676','1987-09-09','尚硅谷');
INSERT INTO t_stu VALUES(NULL,'赵六','男','123456789012345675','1987-09-09','尚硅谷');
INSERT INTO t_stu VALUES
(NULL,'冰冰','女','123456789012345674','1988-09-09','尚硅谷'),
(NULL,'小丽','女','123456789012345673','1988-09-09','尚硅谷');
INSERT INTO t_stu (sname,card_id,birthday)
VALUES('小薇','123456199012045672',STR_TO_DATE(SUBSTRING(card_id,7,8),'%Y%m%d'));
INSERT INTO t_stu (sname,card_id,birthday)VALUES
('小红','123456789012345671','1990-09-09'),
('小紫','123456789012345670','1990-09-09');

练习二

建表
CREATE TABLE t_department(
	did INT PRIMARY KEY AUTO_INCREMENT,
	dname VARCHAR(100) NOT NULL,
	description VARCHAR(200),
	manager_id INT
);

INSERT INTO t_department(dname,description)
VALUES('教学部','技术培训'),
('咨询部','课程咨询服务');
CREATE TABLE `t_job` (
  `job_id` INT(11) PRIMARY KEY AUTO_INCREMENT,
  `job_name` VARCHAR(100) DEFAULT NULL,
  `description` VARCHAR(200) DEFAULT NULL
);

INSERT INTO t_job VALUES
(NULL,'JavaSE讲师','Java基础'),
(NULL,'Web讲师','Web基础'),
(NULL,'JavaEE框架','框架讲解'),
(NULL,'课程顾问','课程咨询');
CREATE TABLE t_employee(
	eid INT PRIMARY KEY AUTO_INCREMENT,
	ename VARCHAR(100) NOT NULL,
	gender CHAR NOT NULL DEFAULT '男',
	card_id CHAR(18) UNIQUE,
	tel CHAR(11),
	job_id INT,
	`mid` INT,
	birthday DATE,
	hiredate DATE,	
	address VARCHAR(100),	
	dept_id INT,
	FOREIGN KEY (dept_id) REFERENCES t_department(did),
	FOREIGN KEY (job_id) REFERENCES t_job(job_id)
);
INSERT  INTO `t_employee`(`eid`,`ename`,`gender`,`card_id`,`tel`,`job_id`,`mid`,`birthday`,`hiredate`,`address`,`dept_id`)
 VALUES (1,'孙红雷','男','123456789012345678','12345678901',1,NULL,'1990-01-01','2015-01-01','白庙',1),
 (2,'张亮','男','123456789012345677','12345678902',2,NULL,'1990-01-02','2015-01-02','天通苑北',1),
  (3,'鹿晗','男','123456789012345676','12345678903',3,NULL,'1990-01-03','2015-01-03','北苑',1),
 (4,'邓超','男','123456789012345675','12345678904',2,NULL,'1990-01-04','2015-01-04','和谐家园',1),
 (5,'孙俪','女','123456789012345674','12345678905',3,NULL,'1990-01-05','2015-01-05','霍营',1),
 (6,'Angelababy','女','123456789012345673','12345678906',4,NULL,'1990-01-06','2015-01-06','回龙观',2);
CREATE TABLE t_salary(
	eid INT PRIMARY KEY,
	basic_salary DECIMAL(10,2),
	performance_salary DECIMAL(10,2),
	commission_pct DECIMAL(10,2),
	deduct_wages DECIMAL(10,2),
	FOREIGN KEY (eid) REFERENCES t_employee(eid)
);
INSERT  INTO `t_salary`(`eid`,`basic_salary`,`performance_salary`,`commission_pct`,`deduct_wages`) 
VALUES (1,'12000.00','6000.00','0.40','0.00'),
(2,'9000.00','5000.00','0.20',NULL),
(3,'11000.00','8000.00',NULL,NULL),
(4,'13000.00','5000.00',NULL,NULL),
(5,'8000.00','8000.00','0.30',NULL),
(6,'15000.00','6000.00',NULL,NULL);

1.2 修改数据

1.2.1 语法

UPDATE 表名称 SET 字段名1 = 值1, 字段名2=值2,...... 【WHERE 条件】;
UPDATE 表1,表2,...... SET 表1.字段名1 = 值1, 表1.字段名2=值2,表2.字段1 = 值1, 表2.字段2=值2...... 【WHERE 条件】;

1.2.2 说明

1、如果不写where条件,会修改所有行

2、值可以是常量值、表达式、函数

3、可以同时更新多张表

如果两个表没有建立外键,但逻辑上有外键关系

4、如果修改从表外键字段的数据,要注意查看主表参照字段的值是否存在

5、如果修改主表的被参考的字段的值,要注意查看从表的外键是否有依赖该值,如果有

(1)如果外键是on update RESTRICT或on update NO ACTION,那么要先处理从表的数据,才能修改

(2)如果外键是on update SET NULL 或 on update CASCADE,那么直接修改,从表的外键字段会自动处理

posted on 2020-10-20 19:22  bbhm  阅读(123)  评论(0编辑  收藏  举报

导航