有关数据表的DML操作
INSERT 针对于数据的插入
DELETE 针对于数据的删除
UPDATE 针对于数据的修改
INSERT INTO 表名 [(列名1,列名2,....)] VALUES (值1,值2,...); 默认情况下,一条插入命令只针对一行进行影响 INSERT INTO 表名 [(columnName,[columnName...])] VALUES (value[,value....]),(value[,value....]),(value[,value....]).....; 一次性插入多条记录 PS 如果我们为每一列都要指定注入的值,那么表名后面就不需要罗列插入的列名了 INSERT INTO 表名 VALUES (值1,值2,值3,....) CREATE TABLE `grade` ( `GradeID` int(0) NOT NULL AUTO_INCREMENT COMMENT '年级编号', `GradeName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '年级名称', PRIMARY KEY (`GradeID`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
replace语句的语法格式有三种语法格式。 语法格式1: replace into 表名 [(字段列表)] values (值列表); 语法格式2: replace [into] 目标表名[(字段列表1) select (字段列表2) from 源表 [where 条件表达式]; 语法格式3: replace [into] 表名 set 字段1=值1, 字段2=值2;
REPLACE与INSERT语句区别:
replace语句的功能与insert语句的功能基本相同,不同之处在于:使用replace语句向表插入新记录时,如果新记录的主键值或者唯一性约束的字段值与已有记录相同,则已有记录先被删除(注意:已有记录删除时也不能违背外键约束条件),然后再插入新记录。
使用replace的最大好处就是可以将delete和insert合二为一(效果相当于更新),形成一个原子操作,这样就无需将delete操作与insert操作置于事务中了
DELETE (TRUNCATE) FROM 表名 [WHERE 条件];
DELETE:删除数据,保留表结构,必要时可以回滚,但是如果数据量较大,运行速度不及TRUNCATE。
TRUNCATE:删除所有数据,保留表结构,不能够回滚。一次全部删除所有数据,速度相对很快。
DROP:删除数据和表结构,删除速度最快。
UPDATE 表名 SET 列名 = 值 [,列名 = 值,列名 = 值,列名 = 值,...] [WHERE 条件];
1:建库 MySchool_db CREATE DATABASE Myschool_db; 2:建表(先主后从) 2.1创建年级表 CREATE TABLE grade( GradeID INT NOT NULL AUTO_INCREMENT COMMENT '年级编号', GradeName VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '年级名称', PRIMARY KEY (GradeID) ) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; 2.2创建科目表 DROP TABLE IF EXISTS subject; CREATE TABLE subject ( SubjectNo int NOT NULL AUTO_INCREMENT COMMENT '课程编号', SubjectName varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课程名称', ClassHour int NULL DEFAULT NULL COMMENT '学时', GradeID int NULL DEFAULT NULL COMMENT '年级编号', PRIMARY KEY (SubjectNo) ) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; 2.3创建学生表 DROP TABLE IF EXISTS student; CREATE TABLE student ( StudentNo int(0) NOT NULL COMMENT '学号', LoginPwd varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, StudentName varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '学生姓名', Sex tinyint(1) NULL DEFAULT NULL COMMENT '性别,取值0或1', GradeId int(0) NULL DEFAULT NULL COMMENT '年级编号', Phone varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话,允许为空,即可选输入', Address varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地址,允许为空,即可选输入', BornDate datetime(0) NULL DEFAULT NULL COMMENT '出生时间', Email varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱账号,允许为空,即可选输入', IdentityCard varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '身份证号', PRIMARY KEY (StudentNo) USING BTREE, UNIQUE INDEX IdentityCard(IdentityCard) USING BTREE, INDEX Email(Email) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; 2.4创建成绩表 CREATE TABLE `result` ( `StudentNo` int(0) NOT NULL COMMENT '学号', `SubjectNo` int(0) NOT NULL COMMENT '课程编号', `ExamDate` datetime(0) NOT NULL COMMENT '考试日期', `StudentResult` int(0) NOT NULL COMMENT '考试成绩', INDEX `SubjectNo`(`SubjectNo`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>注入年级数据 INSERT INTO `grade` VALUES (1, '大一'); INSERT INTO `grade` VALUES (2, '大二'); INSERT INTO `grade` VALUES (3, '大三'); INSERT INTO `grade` VALUES (4, '大四'); INSERT INTO `grade` VALUES (5, '预科班'); INSERT INTO `grade` VALUES (6, '幼儿园'); INSERT INTO `grade` VALUES (7, '老年大学'); >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>注入科目数据 INSERT INTO `subject` VALUES (1, '高等数学-1', 110, 1); INSERT INTO `subject` VALUES (2, '高等数学-2', 110, 2); INSERT INTO `subject` VALUES (3, '高等数学-3', 100, 3); INSERT INTO `subject` VALUES (4, '高等数学-4', 130, 4); INSERT INTO `subject` VALUES (5, 'C语言-1', 110, 1); INSERT INTO `subject` VALUES (6, 'C语言-2', 110, 2); INSERT INTO `subject` VALUES (7, 'C语言-3', 100, 3); INSERT INTO `subject` VALUES (8, 'C语言-4', 130, 4); INSERT INTO `subject` VALUES (9, 'JAVA第一学年', 110, 1); INSERT INTO `subject` VALUES (10, 'JAVA第二学年', 110, 2); INSERT INTO `subject` VALUES (11, 'JAVA第三学年', 100, 3); INSERT INTO `subject` VALUES (12, 'JAVA第四学年', 130, 4); INSERT INTO `subject` VALUES (13, '数据库结构-1', 110, 1); INSERT INTO `subject` VALUES (14, '数据库结构-2', 110, 2); INSERT INTO `subject` VALUES (15, '数据库结构-3', 100, 3); INSERT INTO `subject` VALUES (16, '数据库结构-4', 130, 4); INSERT INTO `subject` VALUES (17, 'C#基础', 130, 1); >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>注入学生数据 INSERT INTO `student` VALUES (1000, '111111', '郭靖', 1, 1, '13500000001', '北京海淀区中关村大街1号', '1986-12-11 00:00:00', '[email protected]', '450323198612111234'); INSERT INTO `student` VALUES (1001, '123456', '李文才', 1, 2, '12345678901', '广东广州天河区', '1981-12-31 00:00:00', '[email protected]', '450323198112311234'); INSERT INTO `student` VALUES (1002, '111111', '李斯文', 1, 1, '13500000003', '天津市和平区', '1986-11-30 00:00:00', '[email protected]', '450323198611301234'); INSERT INTO `student` VALUES (1003, '123456', '武松', 1, 3, '13500000004', '上海市金桥区', '1986-12-31 00:00:00', '[email protected]', '450323198612314234'); INSERT INTO `student` VALUES (1004, '123456', '张三', 1, 4, '13500000005', '北京市通州', '1989-12-31 00:00:00', '[email protected]', '450323198612311244'); INSERT INTO `student` VALUES (1005, '123456', '张秋丽 ', 2, 1, '13500000006', '广西桂林市灵川', '1986-12-31 00:00:00', '[email protected]', '450323198612311214'); INSERT INTO `student` VALUES (9527, '888999', '赵尧林', 1, 1, '19988887777', '西安市雁塔区新家坡3号楼', '2000-01-01 00:00:00', '[email protected]', '610101200002029988'); INSERT INTO `student` VALUES (1007, '111111', '欧阳峻峰', 1, 1, '13500000008', '北京东城区', '1986-12-31 00:00:00', NULL, '450323198612311133'); INSERT INTO `student` VALUES (1008, '111111', '梅超风', 1, 1, '13500000009', '河南洛阳', '1986-12-31 00:00:00', NULL, '450323198612311221'); INSERT INTO `student` VALUES (1028, '111111', '赵敏', 1, 3, '13955556666', '西安市雁塔区', NULL, NULL, NULL); INSERT INTO `student` VALUES (8080, '123123', '李寻欢', 1, 1, '13677778888', '西安市碑林区', '2005-05-01 00:00:00', '[email protected]', '610101200505019900');
基础语法
SELECT {*,列名,函数} FROM 表名 [WHERE 条件]; 说明: -SELECT检索关键字 *匹配所有列 , 匹配指定列 -FROM 所提供的数据源(表,视图,另一个查询机制反馈的结果) -WHERE 条件(控制查询的区域) SELECT * FROM student; #查询学生表的所有列以及所有行 ====> 学生表的全部信息 SELECT StudentName,Address,Email #查询指定三列的内容所有行 ====> 学生表的姓名 住址 邮箱 FROM student; SELECT StudentName,Address,Email #查询指定三列的内容指定行 ====> 学生表的姓名 住址 邮箱 FROM student WHERE sex = 0; #结论 SELECT 关键字 和 FROM 关键字之间 写的东西 控制的是我们结果的列数 # WHERE 写的东西 控制的是我们结果的行数 #生日在2000-01-01 2010-01-01 的男生 的 姓名 SELECT StudentName FROM student WHERE BornDate>'2000-01-01' AND BornDate<'2010-01-01' AND sex = 1;
SELECT 语句中的算数表达式
对数值型数据列、变量、常量可以使用算数操作符创建表达式(+ - * /) 对日期型数据列、变量、常量可以使用部分算数操作符创建表达式(+ -) 运算符不仅可以在列和常量之间进行运算,也可以在多列之间进行运算。 SELECT 100+80; SELECT '300'+80; #只要其中一个是数值类型,而另一个能够转成数值,则自动转换并计算 SELECT 'ABC'+20; #若转换不成功,则将其认为是数字0对待 SELECT 'Hello'+'World';#若转换不成功,则将其认为是数字0对待 SELECT NULL+80; #只要有一个为NULL,则结果为NULL
运算符优先级
乘除优先级高于加减 同级运算时运算顺序由左到右 表达式内使用括号,可以改变优先级的运算顺序 SELECT * FROM subject; +-----------+-------------------+-----------+---------+ | SubjectNo | SubjectName | ClassHour | GradeID | +-----------+-------------------+-----------+---------+ | 1 | 高等数学-1 | 110 | 1 | | 2 | 高等数学-2 | 110 | 2 | | 3 | 高等数学-3 | 100 | 3 | | 4 | 高等数学-4 | 130 | 4 | | 5 | C语言-1 | 110 | 1 | | 6 | C语言-2 | 110 | 2 | | 7 | C语言-3 | 100 | 3 | | 8 | C语言-4 | 130 | 4 | | 9 | JAVA第一学年 | 110 | 1 | | 10 | JAVA第二学年 | 110 | 2 | | 11 | JAVA第三学年 | 100 | 3 | | 12 | JAVA第四学年 | 130 | 4 | | 13 | 数据库结构-1 | 110 | 1 | | 14 | 数据库结构-2 | 110 | 2 | | 15 | 数据库结构-3 | 100 | 3 | | 16 | 数据库结构-4 | 130 | 4 | | 17 | C#基础 | 130 | 1 | +-----------+-------------------+-----------+---------+ SELECT SubjectName,ClassHour,ClassHour*10+10 FROM subject; SELECT SubjectName,ClassHour,ClassHour*(10+10) FROM subject;