sql: structured query language(结构化查询语言)
查看所有的数据库:show databases;
显示某个库的创建信息:show create database mydb3;
删除之前创建的mydb1数据库:drop database mydb1;
修改字符集:alter database mydb2 character set gb2312;
退出MySQL客户端:quit
在win命令行窗口中下才执行:mysqldump -uroot -p mydb1>D:\test.sql(这种文件是脚本文件)
a.创建数据库:create database mydb1 character set utf8;
b.恢复:source D:\test.sql
a.先在服务器中创建一个叫mydb1的数据库:
b. mysql -uroot -p mydb1 进入某个库,在其中创建表:use db_name; create table employee ( id int, name varchar(20), gender varchar(4), birthday date, entry_date date, job varchar(40), salary double, resume text )character set utf8 collate utf8_general_ci; 注:VARCHAR、BLOB和TEXT类是变长类型,每个类型的存储需求取决于列值的实际长度。 在表employee上增加一列image,类型为blob:alter table employee add image blob; 修改job列长度为60:alter table employee modify job varchar(60); 删除gender列:alter table employee drop gend 将表名改为user:rename table employee to user; 修改表的字符集为utf8:alter table user character set gb2312; 修改列名name为username:alter table user change column nameusername varchar(20); 查看所有的表:show tables; 查看表的创建细节:show create table table_name; 查看表的结构:desc employee; insert into user(id,username,birthday,entry_date,job,salary,resume)values(1,'rsl','1993-03-21','2018-02-18','teacher',10000,'resume'); 插入一个名字是中文的员工信息: insert into user(id,username,birthday,entry_date,job,salary,resume)values(2,'小李','1993-03-21','2018-02-18','teacher',10000,'resume'); 发现也可以,因为我们查看编码:show variables like 'chara%';(显示字符集) 结果: +--------------------------+---------------------------------------------------------+ | Variable_name Value | +--------------------------+---------------------------------------------------------+ character_set_client gbk character_set_connection gbk | character_set_database utf8 character_set_filesystem binary character_set_results gbk character_set_server utf8 character_set_system utf8 character_sets_dir C:\Program Files\MySQL\MySQL Server5.7\share\charsets\ +--------------------------+---------------------------------------------------------+ 发现character_set_client 是gbk,若是utf8,则插入汉字就会报错。 测试:将character_set_client(客户端) 改为utf8:set character_set_client=utf8;以及将set character_set_results(显示结果)改为:set character_set_results=utf8;再select * from user;结果就乱码,因为utf8不识别中文字符。在insert的时候一定要注意。 使用update更新 (所有行某一列)将salary列的值改为5000:updateuser set salary=5000; (指定的行的某一列)将姓名为rsl的员工工资改为8000:update user set salary=8000 where username='rsl'; (指定的一行的多列)将姓名为小李的员工工资改为4000,job改为ccc:update user set salary=4000,job='ccc' whereusername='小李'; 将rsl的salary在原有的基础上增加1000: update user set salary=salary+1000 where user name='rsl'; 注意(经验):写update语句时,先写好update user salary=... where username='rsl';不然会把所有用户的数据全部改掉,后果严重 练习: 删除名字为小明的记录:delete from user where username='小明'; 删除表中所有的数据:delete from user或truncate table user; 区别:truncate table user;是先摧毁表,再重建表的结构 delete fromuser;是一行一行的删除; Select查询所有数据、某些列数据、过滤重复的信息 1、select *from user; 2、select id,username,birthday,entry_date,job,salary,resumefrom user; 上面两个效果一样,但是建议写成第二种,因为实际开发的时候别人才能知道你查询的是哪些数据。 查询表中所有人的username以及对应的job、salary select user name,job,salary from user; 过滤掉表中重复的数据 1、Select distinct job from user; +---------+ | job | +---------+ | teacher | | doctor | | student | +---------+ 2、Select distinct username,job from user; +----------+---------+ | username |job | +----------+---------+ | rsl | teacher | | wangwu | doctor | | zhangsan |student | | lisi | student | +----------+---------+ 练习1: 1、在所有的人的工资上加1000进行查询: SELECT username,salary+1000FROM USER;//并没有改变原有数据库的值 2、统计每个人的总工资:select username,(salary+salary2)from user; 3、使用别名表示总工资: select username as 姓名 ,(salary+salary2) as 总薪水 from user; 或者 select username 姓名 ,(salary+salary2)总薪水 from user; 练习2: 查询姓名为rsl的薪水salary: Select salary fromuser where username=’rsl’; 全部信息:Select * from user where username=’rsl’; 查询基本工资大于等于7000的人的信息: Select *from userwhere salary>=7000; Where语句的运算符: 练习: 查询基础工资在7000-8000之间的人的job Select job from user where salary>=7000 and salary<=8000; Select job from user where salary between 7000 and 8000; 查询基础工资在7000-8000之间的人的信息 Select * from user where salary>=7000 and salary<=8000; Select * from user where salary between 7000 and 8000; 查询符合条件的人的信息 Select * from user where salary2 in(100,300); Select * from user where salary2=100 or salary2=300; 查询所有姓li的信息: Select * from user where username like ‘li%’; +------+----------+------------+------------+---------+--------+--------+---------+ | id | username | birthday | entry_date | job | salary | resume | salary2 | +------+----------+------------+------------+---------+--------+--------+---------+ | 4 | lisi | 1996-03-21 | 2016-05-17 | student | 6000 | ddddd | 100 | | 5 | liwu | 1995-03-21 | 2016-05-17 | doctor | 5000 | eeeee | NULL | +------+----------+------------+------------+---------+--------+--------+---------+ 练习: 对薪水进行升序排列后查询: Select username from user order by(salary+salary2); Select username as 姓名, (salary+salary2) as 薪水 from user order by (salary+salary2) asc; +----------+------+ | 姓名 | 薪水 | +----------+------+ | liwu | 5050 | | lisi | 6100 | | zhangsan |7200 | | wangwu | 8300 | | rsl | 9400 | +----------+------+ 对薪水进行降序排列后查询: Select usernameas 姓名, (salary+salary2) as 薪水 from user order by (salary+salary2) desc; 练习: 统计有多少条记录(行)? Select count(*) from user; 统计薪水大于5000的有多个? Select count(*)from user where salary>5000; 将某一列求和: Select sum(salary)from user; 统计一列的平均值: Select sum(salary)/count(salary)from user; Selectavg(salary) from user; 多列求和: Select sum(salary),sum(salary2)from user; Select max(salary)from user; group by column 对列column分组: 语句:SELECT COLUMN1,COLUMN2,COLUMN3..FROM TABLE GROUP BY COLUMN; 即将column列进行归类,即去掉重复的元素 select column1,column2,column3.. from table group by column having... 注意: Having 和where 都可以过滤,但是having可以使用合计函数,having通常跟在group by 后,它作用于组。 练习: 建立一个table: create table orders ( id int, products varchar(40), price int )character setutf8; Insert into orders(id,products,price) values (1,'洗衣机',3000); Insert intoorders (id,products,price) values (2,'冰箱',5000); Insert intoorders (id,products,price) values (3,'洗衣粉',30); Insert intoorders (id,products,price) values (4,'苹果',20); Insert intoorders (id,products,price) values (5,'冰箱',5000); 进行归类:意思就是讲重复的去掉 Select products from orders group by products; 显示每类商品花了多少钱 Select products,sum(price) from orders group by products; 查询购买了几类商品,并查价格在200以上的商品 Select products,price from orders group by products having sum(price)>200; 一般来说,一个表都至少要有一个主键约束,约束越严格越好,可以避免非法数据的存入。 在创建表的时候就要定义哪些列值是主键约束,不允许重复,不允许为空 创建一个带有主键约束的表: Create table test1 ( id int primary key, username varchar(20), password varchar(20) )character setutf8; Insert intotest1 (id,username,password) values (2,'zhangsan','123456'); 如表: 让系统自己维护某一列带有该性质的值,如创建一个表: Create table test2 ( idint primary key auto_increment, usernamevarchar(20), passwordvarchar(20) )character set utf8; Insert into test2 (id,username,password) values (1,'zhangsan','123456'); Insert into test2 (username,password) values ('lisi','123456'); 只插入姓名,也会自动的在前面id加1: 如果将非数值型的列加上自动增长约束呢? 答:创建不成功,如 Create table test3 ( idint primary key, usernamevarchar(20) primary key auto_increment, passwordvarchar(20) )character set utf8; 报错:Incorrect column specifier for column 'username' 某列的值不允许重复,如账号 创建一个带有唯有约束的表: Create table test3 ( idint primary key, usernamevarchar(20) unique, passwordvarchar(20) )character set utf8; 执行: Insert into test3 (id,username,password) values (1,'lisi','123456'); Insert into test3 (id,username,password) values (2,'lisi','123457'); ERROR 1062 (23000): Duplicate entry 'lisi' for key 'username' l 数据不能为空,如注册的时候用户名不能为空: Create table test4 ( idint primary key, usernamevarchar(20) unique not null, passwordvarchar(20) )character set utf8; 什么是外键约束? 创建外键约束的表: create table husband ( id int primary key, name varchar(20) ); create table wife ( id int primary key, name varchar(20), husband_id int, constraint husband_id_FK foreign key(husband_id)references husband(id) ); 注: constraint表示要添加外键约束了 husband_id_FK 表示外键约束的名称,惯性用法:要约束的列名称_FK foreign key()表示你要约束哪一列,这里即husband_id references husband(id)表示参照某个表(husband)的某个列值(id) husband表结构和wife表结构如下: 在husband表中插入数据: insert into husband (id,name) values (1,'lisi'); insert into husband (id,name) values (2,'wangwu'); 在wife表中插入数据: insert into wife (id,name,husband_id) values (1,'xiaocui',2); insert into wife (id,name,husband_id) values (2,'fengjie',1); insert into wife (id,name,husband_id) values (3,'fengjie',5); 报错: 对象:有一个部门对象department、有一个员工对象Emplyee 联系:部门里有很多员工,每个员工有固定的所属部门 关系:从关系上看可以是一个部门对应多个员工,也可以是多个员工对用一个部门 现在要将右侧的数据存入表中: l 原则1: 将一个对象的数据存入到一张表中,不管对象之间是什么关系,就看对象有什么基本属性就设置这些属性作为列 l 原则2 在有关联的对象的两张表中,在多的表中加外键约束。 如此例子中,在Emplyee表中加外键约束,表明每个员工是属于哪个部门 原则同上 在多对多关系中,要建立一张中建表来存储两张表的关系 如中建表teacher_student表,里面有两列,分别都是外键约束,用来表示一个与另一个之间的关系,如:1号老师——学生1、学生2 学生1——老师1、老师2、老师3等等 下面来创建这样一张表: create table teacher ( id int primary key, name varchar(20), salary double ); create table student ( id int primary key, name varchar(20) ); create table teacher_student ( teacher_id int, student_id int, primary key(teacher_id,student_id), constraint teacher_id_FK foreign key(teacher_id) referencesteacher(id), constraint student_id_FK foreign key(student_id) referencesteacher(id) ); 将表: 中的数据存入数据库中至少要写5条sql语句: insert into teacher (id,name,salary) values (1,'张三',5000); insert into teacher (id,name,salary) values (2,'王五',6000); insert into student (id,name) values (1,'小明'); insert into student (id,name) values (2,'小张'); insert into teacher_student (teacher_id,student_id) values (1,1); insert into teacher_student (teacher_id,student_id) values (1,2); insert into teacher_student (teacher_id,student_id) values (2,1); 通常来说,将从的某一列设置为主键约束和外键约束 创建一个Person的表: create table person ( id int primary key, name varchar(20) ); 创建Idcard表: create table idcard ( id int primary key, addr varchar(20), constraint person_id_FK foreign key(id) references person(id) ); 推荐他人博文: Mysql全程讲解(难点:键、索引和约束的关系) -----------------------------------------------------------我是分割线-------------------------------------------------------------------- 这是我的mysql基础学习笔记,欢迎阅读和提出意见和建议。 5、创建表
练习:创建一个员工表
6、修改表(增加列、修改列、删除列)
MySql常用数据类型
修改表中列(增加列、修改列长度、删除列)、修改表的名称、字符集
练习:在表中增加一列,修改列的长度,删除列
7、查看表(创建细节、结构、数据库中所有表的名称列表)
8、插入数据(insert into table_name)插入记录
练习:使用insert语句向表中插入一个员工的信息:
9、update 值 where…:用于更改表中的数据值
练习:在上面创建的employee表中修改表中的记录:
10、delete 记录
11、select 数据
练习:查询表中所有的学生的信息
12、表达式作用于列进行查询、as语句
select语句二:
select语句三:Where语句
在where语句中经常使用的运算符:
order by 语句
count函数
sum函数
select语句六:
使用Having 子句过滤
13、时间、日期函数
14、字符串函数
15、数学函数
16、定义表的约束(重点)
定义主键的约束
定义主键自动增长(开发不常用)
定义唯一的约束
定义非空约束
定义外键约束
17、将对象的数据存入数据库中
一对多、多对一
多对多(老师-学生)
一对一(主从)