1. 什么是数据库
存储数据的仓库
存储数据的仓库
2. 什么数据:
大家所知道的都是数据.比如:你同学的名字,年龄,性别等等
大家所知道的都是数据.比如:你同学的名字,年龄,性别等等
3. 数据库概念
1.数据库服务器
2.数据库管理系统
重点
3.库
4.表
5.记录
6.数据
参考画图
4.环境安装:
1.傻瓜式安装下载地址
https://dev.mysql.com/downloads/installer/
2. ZIP 包下载地址
https://dev.mysql.com/downloads/mysql/
3.完全卸载mysql:http://www.cnblogs.com/wangfengming/articles/7879074.html
1.数据库服务器
2.数据库管理系统
重点
3.库
4.表
5.记录
6.数据
参考画图
4.环境安装:
1.傻瓜式安装下载地址
https://dev.mysql.com/downloads/installer/
2. ZIP 包下载地址
https://dev.mysql.com/downloads/mysql/
3.完全卸载mysql:http://www.cnblogs.com/wangfengming/articles/7879074.html
5.库操作:就是文件夹database,cmd命令行输入mysql -u root -p,再输入密码123进入mysql。
1.创建
CREATE DATABASE DB2 charset utf8;
2.删除
DROP DATABASE db2;
3.使用(进入)
use db1;
4.查看库
show databases ; -- 查看当前用户下所有的库名
select DATABASE(); -- 查看当前使用的
show CREATE DATABASE db1; -- 查看创建库的信息
1.创建
CREATE DATABASE DB2 charset utf8;
2.删除
DROP DATABASE db2;
3.使用(进入)
use db1;
4.查看库
show databases ; -- 查看当前用户下所有的库名
select DATABASE(); -- 查看当前使用的
show CREATE DATABASE db1; -- 查看创建库的信息
6.表操作table SQL语句
1.创建表
create table info1(
id int not null auto_increment PRIMARY key,
name VARCHAR(50) not null,
sex CHAR(2) NULL
)
2.查看表
select * from info1; -- 查看表数据 ; select * from info1 where id = 1;--查看表数据第一行
1.创建表
create table info1(
id int not null auto_increment PRIMARY key,
name VARCHAR(50) not null,
sex CHAR(2) NULL
)
2.查看表
select * from info1; -- 查看表数据 ; select * from info1 where id = 1;--查看表数据第一行
DESC info1; -- 查看表结构
show create table info1; -- 查看表的创建信息
3.删除表
drop table info;
4.修改表
-- ALTER table info1 add age int not null ; -- 添加表字段
3.删除表
drop table info;
4.修改表
-- ALTER table info1 add age int not null ; -- 添加表字段
-- alter table info1 drop age; -- 删除表字段
-- alter table info1 modify name char(100) null ; -- 修改表字段属性:类型,长度,小数点,不是null
-- alter table info1 CHANGE name names varchar(50) not null; -- 修改表名称和表字段属性
补充信息(很少使用)
alter table info1 add PRIMARY key(ID,names); -- 添加主键(ID的自动递增是没有的);添加了两个(或多个)主键称为联合主键,意思是ID一样的时候,names必须不一样;ID不一样的时候,names可以一样。
补充信息(很少使用)
alter table info1 add PRIMARY key(ID,names); -- 添加主键(ID的自动递增是没有的);添加了两个(或多个)主键称为联合主键,意思是ID一样的时候,names必须不一样;ID不一样的时候,names可以一样。
alter table info1 drop PRIMARY key ;-- 删除主键(包括联合主键)
alter table info1 alter sex set default '男'; -- 设置默认值
alter table info1 alter sex set default '男'; -- 设置默认值
alter table info1 alter sex drop default; -- 删除默认值
5.修改表名称
rename table info1 to info; -- 修改表名
6.复制表
一、select :
1.只复制表数据和表结构:create table info1 select * from info; 主键自增/索引/触发器/外键 --> 不会被复制。
2.只复制第一行表数据:create table info1 select * from info where id = 1; 主键自增/索引/触发器/外键 --> 不会被复制。
3.只复制表结构:create table info1 select * from info where 1!=1; 数据/主键自增/索引/触发器/外键 --> 不会被复制。
5.修改表名称
rename table info1 to info; -- 修改表名
6.复制表
一、select :
1.只复制表数据和表结构:create table info1 select * from info; 主键自增/索引/触发器/外键 --> 不会被复制。
2.只复制第一行表数据:create table info1 select * from info where id = 1; 主键自增/索引/触发器/外键 --> 不会被复制。
3.只复制表结构:create table info1 select * from info where 1!=1; 数据/主键自增/索引/触发器/外键 --> 不会被复制。
二、like:
1.只复制表结构:create table info1 like info; 数据/触发器/外键 --> 不会被复制。主键自增被复制,数据不被复制。
7.数据类型
1.只复制表结构:create table info1 like info; 数据/触发器/外键 --> 不会被复制。主键自增被复制,数据不被复制。
7.数据类型
--四个类 数字 文本 集合 日期
http://www.cnblogs.com/a438842265/articles/8475929.html
varchar 是可变字符串
char 是固定字符串
char 是固定字符串
char (m)
char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
PS: 即使数据小于m长度,也会占用m长度,但是在查询时,查出的结果会自动删除尾部的空格
特点:定长,简单粗暴,浪费空间,存取速度快
varchar(m)
varchar 数据类型用于变长的字符串,可以包含最多达65535个字符(理论上可以,但是实际上在超出21845长度后,mysql会自动帮您转换数据类型为文本类型)。
其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。
char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
PS: 即使数据小于m长度,也会占用m长度,但是在查询时,查出的结果会自动删除尾部的空格
特点:定长,简单粗暴,浪费空间,存取速度快
varchar(m)
varchar 数据类型用于变长的字符串,可以包含最多达65535个字符(理论上可以,但是实际上在超出21845长度后,mysql会自动帮您转换数据类型为文本类型)。
其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。
PS: varchar类型存储数据的真实内容,例如:如果'ab ',尾部的空格也会被存起来
强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)
如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)
如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)
特点:变长,精准,节省空间,存取速度慢
sql优化:创建表时,定长的类型往前放,变长的往后放
比如性别 比如地址或描述信息
PS:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。
因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
text
text数据类型用于保存变长的大字符串,可以最多到65535 (2**16 ? 1)个字符。
强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)
如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)
如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)
特点:变长,精准,节省空间,存取速度慢
sql优化:创建表时,定长的类型往前放,变长的往后放
比如性别 比如地址或描述信息
PS:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。
因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
text
text数据类型用于保存变长的大字符串,可以最多到65535 (2**16 ? 1)个字符。
8.数据操作
1.增
-- INSERT into info values(1,'韩涉','女');
1.增
-- INSERT into info values(1,'韩涉','女');
-- INSERT into info(id,NAMES) values(2,'韩涉');
-- INSERT into info(id,NAMES) values(3,'韩涉'),(4,'韩涉'),(5,'韩涉');
-- INSERT into info(names,sex) select nameS,sex from info ;因为id 有主键自增,所以insert into info select * from info报错。
--如果有两个表:info 和info1,可以把info 的数据插入到info1当中:insert into info1(names,sex) select names,sex from info;
2.删--- 一定要加条件
-- DELETE from info where id = '11'; -- 删除指定数据
-- delete from info; -- 删除整张表中所有的数据
TRUNCATE info; -- 清空整张表
3.改
语法:update 文件名 set
--如果有两个表:info 和info1,可以把info 的数据插入到info1当中:insert into info1(names,sex) select names,sex from info;
2.删--- 一定要加条件
-- DELETE from info where id = '11'; -- 删除指定数据
-- delete from info; -- 删除整张表中所有的数据
TRUNCATE info; -- 清空整张表
3.改
语法:update 文件名 set
update info set sex = '人妖', names = '韩小强' where id=12;
4.查
4.1 简单查询
select * from person; -- 查询所有
4.查
4.1 简单查询
select * from person; -- 查询所有
select name,SEX from person; -- 按指定字段查询
select name,SEX as'性别' from person; -- as 表示为字段起别名
select salary+200 from person; -- 可以进行数据列运算,但是只是运算结果加了200,原数据是没有加的。
select DISTINCT age,name FROM person; -- 去重复查询(必须全部一样才可以去重)
4.2 条件查询
1.运算符
select * FROM person WHERE age >20;
select * FROM person WHERE age <=20;
1.运算符
select * FROM person WHERE age >20;
select * FROM person WHERE age <=20;
select * FROM person WHERE age <>20;
select * FROM person WHERE age !=20;
select * FROM person WHERE age !=20;
2.null 关键字
select * FROM person where dept_id is null; 真的是空的
select * FROM person where dept_id is null; 真的是空的
select * FROM person where dept_id is not null; 真的不是空的
select * FROM person where name =''; -- 字符串为空
3.逻辑运算符 and or
select * from person where age = 28 and salary =53000;
select * from person where age = 23 or salary =2000;
select * from person where not(age = 28 and salary =53000);
select * from person where not(age = 28 and salary =53000);
` 4.3 区间查询
select * from person where age BETWEEN 18 and 20;
select * from person where age BETWEEN 18 and 20;
ps: between...and 前后包含所指定的值
等价于 select * from person where salary >= 4000 and salary <= 8000;
等价于 select * from person where salary >= 4000 and salary <= 8000;
4.4集合查询
select * from person where id = 1 or id = 3 or id = 5;
select * from person where id not in(1,3,5); ##关键字in
4.5 模糊查询---用在搜索上
select * from person where name like '%e%'; -- 包含指定参数
select * from person where name like '%e'; -- 以什么结尾
select * from person where name like 'e%'; -- 以什么开头
select * from person where name like '__e%'; -- _表示单个字符站位符
select * from person where name like '__';
4.6 排序查询 ORDER BY
select * from person where age >30 ORDER BY salary desc; -- ASC正序 DESC倒序-写在最后
select * from person ORDER BY CONVERT(name USING gbk);-- 中文排序 --因为中文不支持排序所以要换成gbk
4.6 排序查询 ORDER BY
select * from person where age >30 ORDER BY salary desc; -- ASC正序 DESC倒序-写在最后
select * from person ORDER BY CONVERT(name USING gbk);-- 中文排序 --因为中文不支持排序所以要换成gbk