创建用户的权限:
Select_priv;insert_priv;updata_priv;delete_priv;create_priv;drop_priv;reload_priv;shutdown_priv;process_priv;file_priv;grant_priv;references_priv;index_priv;later_priv;
注:在严格模式下insert形式的添加用户操作被禁止
创建数据表的时候需要设置表字段名,同时定义每个表字段(定义其数据类型,以及属性)
创建用户
CREATE USER 'laowang'@'localhost' IDENTIFIED BY '123456';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON *.* TO 'laowang'@'localhost';
创建数据表后可以通过engine设置存储引擎;
通过charset设置编码方式,如:
creat table a(
id int auto_increment,
……)
engine = innoDB
default charset = utf8;
注:为了区分Mysql关键字与普通字符SQL语言引入了`(反单引号),一般表名和字段名都用反引号
innoDB是MySQL上第一个提供外键约束的数据存储引擎,其设计目标是处理大容量数据时最大性能化。innoDB是MySQL后台的一个完整数据库系统,有着自己的缓冲池,能缓冲数据、索引。
创建库
create datebase database_name
创建表
create table table_name(
column 数据类型,
column 数据类型,
...)
表的最常用的数据类型有四大类:整数、小数、字符、日期:
约束:
用于限制加入表的数据的类型,可以在创建的时候在数据类型后面规定或者之后更新表的时候规定
not null:不接受null,如果不向字段添加值就无法插入或更新
unique:唯一标识数据表中的每条记录,可以有多个
primary key:唯一标识数据表中的没条记录,只能有一个主键
foreign key:该键一般指向另一个表中的主键,预防破坏表之间连接的动作
check:限制列中值的范围
default:规定该列在未插入时候的默认值
删除:
drop table 表名;
delete from 表名 where 删除条件;删除条件:如neme = "张三";
truncate table 表名;//清楚数据,保存表结构
注:delete操作可以回滚;执行速度上drop>truncate>delete
插入:
insert into 表名(字段名,……) values(字段值,……);//values后面可以跟多个()实现一次性添加多组数据;
注:如果所有的列都要添加数据便可以省去(字段名)
查询:
select column_name,……//可用*号代替,表示所有字段数据
from table_name
[where Clause]//条件
[limit n] [offset m];//前者限制返回记录数、后者设置跳过的记录量
注:Clause可以有很多种限制如:name = ;name like;name in();同时可用and/or衔接多条条件。
以上like比较重要,为模糊匹配,可以与'%'、'_'配合使用以代表大量字符串如'abuse∈a%','ab∈a_'
流弊点的有:
关联查询:select 字段 from 表1 left join 表2 on 条件 (一般为表1与表2的关联条件)//订单的统计会用到
多级关联查询以及聚合函数的使用;
MySQL 分页查询;
更新:
update table_name set field1 = new-value1,field2 = new-value2
[where Clause];
可以同时更新一个或多个字段,可以用where筛选出特定的字段,可以在单独的一个表中同时更新数据。
注:UPDATE table_name SET field=REPLACE(field, 'old-string', 'new-string') [WHERE Clause]//可以像这样批量修改字符串
关于where:
可以在其后面指定任何条件;
也可用于delete、update操作;
不等式的操作符都可以用;
主要用于在初始表中筛选查询。它是一个约束声明,用于约束数据,在返回结果集之前起作用。
group by:对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。
having:用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作。
between:between value1 and value2会选取介于两个值(数值、文本、日期)之间的数据范围,具体的为[value1,value2)半开半闭形式
合并结果集:
select ... union sfelect ...
将两个及以上的查询结果纵向组合到一个结果集合中;
用于将不同表中相同列中查询的数据展示出来;(不包括重复数据);
UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)
排序
select field1, field2,...fieldN FROM table_name1, table_name2...
order by field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
对读取的数据按照设计的字段按设计的方式排序;
分组
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
对搜索的结果进行分组
别名
select * from table1 as alias_table1
select column1 as alias_column1 from table1
别名的作用主要是使得查询语句更容易书写和阅读,如:
select po.c1, p.c1, p.c2 table1 as p, table2 as po where p.c1='zhy' and p.c1='yss'
连接
inner join :内连接、等值连接,获取两个表中字段匹配关系的记录。
left join :左连接主左,主要获取左表所有记录,即使右表中没有与之匹配的也从左表返回所有行。
right join :右连接主右,主要获取右表所有记录,即使左表没有与之匹配的也从右表中返回所有的行。
full join:只要表中存在匹配,便会返回行
无论左右都是先遍历左表匹配遍历完之后遍历右表。
select T1.c1,T1.c2,T2.c1 from T1 inner join T2 on 条件
NULL
NULL值是遗漏的位置数据;
is null;is not null;这两个操作符是查找null值的方式;
select * from table1 where column1 is null;
null与任意值比较永远返回null
关于null在不同的数据库系统中有不同的函数实现可以将遍历到的null转换为其它值:isnull()、nvl()、ifnull()、coalesce()
select column1,column2*(column3+ifnull(column3,0))
通配符
%:零或多个字符
_:一个字符
[charlist]:字符列中的任何单一字符
[!charlist]/[^charlist]:除字符列外的任一字符
Increment属性
士在每次插入新纪录时,自动地创建主键字段的值
在定义表的列的时候将‘auto_increment’同约束一起声明。
数据类型
Text类型:
char():固定长度的字符串
varchar(size):可变长度的字符串
tinytext:最大长度为255个字符的字符串
text:存放最大长度为2^16个字符的字符串
blob:存放最多2^16字节的数据
mediumtext:最大长度为2^24个字符的字符串
mediumblob:最大长度为2^24个字节
longtext:最大长度为2^32个字符的字符串
longblob:最大长度为2^32个字节的数据
enum(x,y,z,etc.):枚举类型,该枚举列表只能容纳2^16个值(此处x、y、z只是例子)
set:与enum类似,不过set只能包含64个列表项
Number类型:
tinyint(size):大小为一个字节
smallint(size):大小为两个字节
mediumint(size):大小为三个字节
int(size):大小为四个字节
bigint(size):大小为八个字节
以上声明中的参数size为规定的最大位数
float(size,d):带浮动小数点的小数字
double(size,d):带浮动小数点的大数字
decimal(size,d):作为字符串存储的double类型
以上声明中的参数size为规定的最大位数,参数d规定小数点右侧的最大位数
Data类型:
Date():YYYY-MM-DD
DateTime():YYYY-MM-DD HH:MM:SS
TimeStamp():
Time():HH:MM:SS
Year():YY(70到69,表示从1970到2069)/YYYY(1901到2155)
SQL服务器
数据库管理系统DBMS
s数据库管理系统是一种可以访问数据库中数据的计算机程序;
DBMS使我们有能力在数据库中提取、修改或者存贮信息;
不同的DBMS提供不同的函数供查询、提交以及修改数据;
关系型数据库管理系统RDBMS
根据数据间的关系来组织和访问数据;
现代的SQL服务器构建在RDBMS之上
SQL函数
avgs():求列的平均值
count():返回值定条件下的行数,如SELECT COUNT(*) FROM table_name
first():返回第一个记录
last():返回最后一个记录
max():返回最大记录
min():返回最小记录
sum():返回列的总额
group by:将查询结果分组,一般与计算函数连用
having:用于将合计函数融入到条件语句中同where关键字一起使用如:
ucase():把字段值转换为大写
lcase():把字段值转换为小写
mid(column_name,start,[length]):从文本字段中提取字符,其中column_name为要提取的字符,start为规定开始的位置,length为要返回的字符数,如果省略,则返回剩余文本
len():返回文本字段中值的长度
round(column_name,decimals):用于把数值字段舍入为指定的小数位数,column_name为要舍入的字段,decimals为要返回的小数位数
now():返回当前的日期和时间
format(column_name,format):用于对字段的显示进行格式化
综合运用
操作表结构:
添加列
alter table table1 add column1 数据类型
删除列
alter table table1 drop column column1
修改列
alter table table1 alter column column1 数据类型
操作元素:
插入元素:
insert into table1 values ();
insert into table1 () values ();
删除元素
delete from table1 where column1='zhy';
delete * from table1
修改元素
update table1 set column1='zhy1',column2='11' where column1='zhy'
查找元素:
select column1,column2 from table1 where (column3='zhy' or column3='yss') and column4='hhh' order by column1;
select * from table1 where column3 in ('zhy','yss'); //or的简写形式
select distinct column1 from table1;
select top 4 * from table1;
select * from table where column1 like 'z%';