Sql笔记

创建用户的权限: 

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%';

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351