快速上手MySql && MySql GUI工具 SQLyog Community (3)

来源:互联网 发布:莽荒纪神兵进阶数据 编辑:程序博客网 时间:2024/05/21 21:37

(本节内容主要是DML语言)

/*
有关数据表的DML操作:
INSERT INTO
DELETE、TRUNCATE
UPDATE
SELECT(条件查询、查询排序、聚合函数、分组查询
多表链接和子查询


INSERT语句
插入数据必须先掺入tb_emp,因为tb_emp有外键约束
*/


CREATE TABLE tb_dept(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18) UNIQUE,
loc VARCHAR(18),
description VARCHAR(200)
);


CREATE TABLE tb_emp(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18) NOT NULL,
sex VARCHAR(2) DEFAULT '男' CHECK(sex='男' OR sex='女'),
age INT CHECK(age > 18 OR age <60),
address VARCHAR(200),
email VARCHAR(100) UNIQUE,
dept_id INT,
CONSTRAINT FOREIGN KEY tb_emp_fk(dept_id) REFERENCES tb_emp(id)
);


#插入数据必须先掺入tb_emp,因为tb_emp有外键约束
#INSERT INTO table [(colunm[,column...])] VALUE(value [,value...]);
#1.指明字段进行插入,注意字段和值数量和类型都需要匹配
INSERT INTO tb_dept(NAME,loc,description) VALUES('开发部','广州','负责软件开发工作');


INSERT INTO tb_dept(NAME,loc,description) VALUES('开发部','广州');


INSERT INTO tb_dept(NAME,loc) VALUES('开发部','广州','负责软件开发工作');


#2.如果插入的values是所有字段,可以不用显示写插入的字段名,强烈不推荐,不影响自动增长
INSERT INTO tb_dept VALUES(2,'财务部','广州','负责财务工作');


INSERT INTO tb_dept(NAME,loc,description) VALUES('运维部','广州','负责运维工作');


#测试 auto_increment
#auto_increment记住曾经生成的值
INSERT INTO tb_dept(NAME,loc,description) VALUES('运维部','广州','负责运维工作');


#3.一次性插入多条记录 MySql特有
INSERT INTO tb_dept(NAME,loc,description) 
VALUES('财务部','广州','负责财务工作'),
('市场部','广州','负责市场工作'),
('采购部','广州','负责采购工作');


#4.可以从一张表中插入数据
#创建一张表和tb_dept表结构一样,这种方式建表,只是复制表结构,不复制约束
CREATE TABLE tb_dept2
SELECT * FROM tb_dept 

CREATE TABLE tb_dept2
SELECT * FROM tb_dept WHERE id = 99

INSERT INTO tb_dept2(id,NAME,loc,description)
SELECT id,NAME,loc,description FROM tb_dept

INSERT INTO tb_emp(NAME,age,address,email,dept_id)
VALUES('mary',26,'gz','mary@163.com',1)


#更新 UPDATE table SET column = value[,column=value] [WHEREcondition];
#where的时候建议使用主键或者unique主键最后,因为和业务无关
UPDATE tb_emp SET age=24 WHERE id =1 ;
UPDATE tb_emp SET age=24,sex='女' WHERE id =1 ;


#删除 DELETE [FROM] table [WHERE Econdition];
DELETE FROM tb_emp;#删除表所有数据(没有成功运行)
DELETE FROM tb_emp WHERE id=2;
DELETE FROM tb_emp WHERE id=3;


/*
#删除 DELETE [FROM] table [WHERE Econdition];
-删除不需要指列名,因为删除总是整行删除,where子句里是一个条件表达式,只有符合该条件的行才会被删除。
没有where子句意味着删除所有数据。
-删除可以一次删除多行,删除哪些行采用where子句限定。


*/
#TRUNCATE语句: 截断表,DDL语句,删除所有语句
TRUNCATE TABLE tb_emp;


/*删除三种方式
(1)delete删除数据,保留表结构,可以回滚,如果数据量大,很慢,
    回滚是因为备份了删除的数据(删除数据时有2个动作,删除与备份)
(2)TRUNCATE删除所有数据,保留表结构,不可以回滚,一次全部删除所有数据,
    速度相对快。(删除数据时只有一个动作,删除)
(3)DROP删除数据和表结构,删除速度最快
    (直接从内存抹去这一块数据)
*/


#数据库机制,auto_commit,值是true和false
#查询MySql自动提交设置(1自动提交,0手动提交)
SELECT @@autocommit;


#修改提交方式
SET autocommit=1;


INSERT INTO tb_emp(NAME,age,address,email,dept_id)
VALUES('mary',26,'gz','mary@163.com',1)


/*
最简单的SELECT语句
SELECT{*,column[alias],...}
FROMtable;
-说明:SELECT列名列表。*表示所有列。
       FROM提供数据源(表名/视图名)
       默认选择所有行


SELECT语句中的算术表达式
(1)对数值型数据列、变量、常量可以使用算数操作符创建表达式;
(2)对日期数据列、变量、常量可以使用部分算数操作符创建表达式;
(3)运算符不仅可以在列和常量之间进行运算,也可以在多列之间进行运算;
SELECT Ename,sal,sal*12 FROM tb_emp;




*/
SELECT{*,column[alias],...} FROMtable;
#查找 字段,字段 从 表
SELECT * FROM tb_dept #*代表所有的列
SELECT id FROM tb_dept #查询单个字段


#算术表达式


/*
乘除运算的优先级高于加减法
同级运算符的顺序是从左到右
表达式中使用括号可强行改变优先级的运算顺序
*/


#NULL 和 0还有空字符串不是一个概念


/*
定义字段的别名
.改变列的标题头
.用于表示计算结果的含义
.作为列的别名
.如果别名中使用特殊字符,或者是强制大小写敏感,或有空格,都可以通过为别名添加双引号实现。


重复记录
.缺省情况下查询显示所有行,包括重复行。
.使用DISTINCT关键字可以从查询结果中清除重复记录
.DISTINCT的作用是后面所有字段的组合


使用where子句限定返回的记录
-字符串和日期要用单引号括起来


比较运算符=、>=、<=、>、<、<>
其他运算符:between and(包含最小值和最大值)、IN、LIKE(模糊查询,注意:%表示零或多个字符;_表示一个字符)、使用IS NULL运算符      


逻辑运算符:and、or、not(优先级:括号最高)


对结果集排序 :order by 列名 asc/desc


*/


原创粉丝点击