当前位置: 澳门新濠3559 > 数据库 > 正文

此前在校学习期间,查看数据库(表)的字符集编码

时间:2019-12-09 01:05来源:数据库
cmd操作mysql方式:    之前在校学习时期,只是知道数据库很主要,不过还未主动去上学精晓。未来的上学进程中学了二遍mysql,就轻巧的做三个总计吧。 下边统计的知识点全部是常事用

cmd操作mysql方式:

    之前在校学习时期,只是知道数据库很主要,不过还未主动去上学精晓。未来的上学进程中学了二遍mysql,就轻巧的做三个总计吧。

下边统计的知识点全部是常事用的,全部是干货,好好珍藏吧。

cmd登陆数据库方法:(方法风流倜傥二实用于在微电脑里布署过数据库相关的蒙受变量,不然必得在cmd里进来到数据库的bin目录卡塔尔(英语:State of Qatar):

    首先记住几个概念:

/* 启动mysql */
net start mysql

  1).mysql -u root -p

    1.数据库(Database卡塔尔国是根据数据构造来协会、存款和储蓄和治本数据的确立在微电脑存款和储蓄设备上的货仓。   

/* 连接与断开服务器 */
mysql -h 地址 -p 端口 -u 用户名 -p 密码

  显示Enter password输入你登陆数据库时的密码。

    2.SQL :布局化查询语言(Structured Query Language卡塔尔国

/* 跳过权力验证登录mysql */
mysqld --skip-grant-tables
-- 修改root密码
密码加密函数password(卡塔尔
update mysql.user set password=password('root');

修改数据库密码

    3.MySQL:关系型数据库管理种类

show processlist -- 呈现怎么线程正在运维
show variables --

  旧密码:A 新密码 B:

    database中积存着种种数码,sql语句用于从database中搜索大家须求的多少,mysql是大器晚成种接收软件,通过说话对database进行操作。

/* 数据库操作 */ ------------------
-- 查看当前数据库
select database();
-- 展现当前时间、客户名、数据库版本
select now(), user(), version();
-- 创建库
create database[ if not exists] 数据库名 数据库选项
数据库选项:
character set charset_name
collate collation_name
-- 查看本来就有库
show databases[ like 'pattern']
-- 查看当前库音讯
show create database 数据库名
-- 改善库的选项音信
alter database 库名 选项音讯
-- 删除库
drop database[ if exists] 数据库名
再就是删除该数据库相关的目录及其目录内容

  mysqladmin -uroot -pA password 'B'

    MySQL笔者使用的是5.6本子,通过管理员身份张开cmd后,启用mysql服务为:net start mysql56,关闭服务为:net stop mysql56。登陆:mysql -h localhost -u root -p     回车的后边输入密码:123456(顾客名和密码在设置时展开设置)

/* 表的操作 */ ------------------
-- 创建表
create [temporary] table[ if not exists] [库名.]表名 ( 表的布局定义 卡塔尔国[ 表选项]
各种字段必得有数据类型
最终三个字段后无法有逗号
temporary 一时表,会话结束时表自动消失
对此字段的定义:
字段名 数据类型 [not null | null] [default default_value] [auto_increment] [unique [key] | [primary] key] [comment 'string']
-- 表选项
-- 字符集
charset = charset_name
借使表未有设定,则运用数据库字符集
-- 存款和储蓄引擎
engine = engine_name
表在治本数据时使用的两样的数据结构,构造分化会导致管理方式、提供的风味操作等不相同
遍布的引擎:innodb myisam memory/heap bdb merge example csv maxdb archive
不相同的内燃机在保存表的架议和多少时行使不相同的方法
myisam表文件含义:.frm表定义,.myd表数据,.myi表索引
innodb表文件含义:.frm表定义,表空间数据和日志文件
show engines -- 彰显存款和储蓄引擎的景色音讯
show engine 引擎名 {logs|status} -- 呈现存款和储蓄引擎的日志或气象音信
-- 数据文件目录
data directory = '目录'
-- 索引文件目录
index directory = '目录'
-- 表注释
comment = 'string'
-- 分区选项
partition by ... (详细见手册卡塔尔(قطر‎
-- 查看全部表
show tables[ like 'pattern']
show tables from 表名
-- 查看表机构
show create table 表名 (新闻更详细)
desc 表名 / describe 表名 / explain 表名 / show columns from 表名 [like 'pattern']
show table status [from db_name] [like 'pattern']
-- 修改表
-- 修改表本身的拈轻怕重
alter table 表名 表的选料
eg: alter table 表名 engine=myisam;
-- 对表实行重命名
rename table 原表名 to 新表名
rename table 原表名 to 库名.表名 (可将表移动到另多个数据库)
-- rename能够换来多少个表名
-- 修改表的字段机构
alter table 表名 操作名
-- 操作名
add[ column] 字段名 -- 增加字段
after 字段名 -- 表示增加在该字段名前边
first -- 表示扩充在率先个
add primary key(字段名卡塔尔国 -- 创制主键
add unique [索引名] (字段名卡塔尔-- 创造独一索引
add index [索引名] (字段名卡塔尔国 -- 创造普通索引
add
drop[ column] 字段名 -- 删除字段
modify[ column] 字段名 字段属性 -- 支持对字段属性实行修正,不能改进字段名(全体原有属性也需写上卡塔尔(قطر‎
change[ column] 原字段名 新字段名 字段属性 -- 协理对字段名匡正
drop primary key -- 删除主键(删除主键前需删除其auto_increment属性)
drop index 索引名 -- 删除索引
drop foreign key 外键 -- 删除此而外键

刷新权限:


-- 删除表
drop table[ if exists] 表名 ...
-- 清空表数据
truncate [table] 表名
-- 复制表布局
create table 表名 like 要复制的表名
-- 复制表结议和数目
create table 表名 [as] select * from 要复制的表名
-- 检查表是还是不是有不当
check table tbl_name [, tbl_name] ... [option] ...
-- 优化表
optimize [local | no_write_to_binlog] table tbl_name [, tbl_name] ...
-- 修复表
repair [local | no_write_to_binlog] table tbl_name [, tbl_name] ... [quick] [extended] [use_frm]
-- 分析表
analyze [local | no_write_to_binlog] table tbl_name [, tbl_name] ...

  flush priviliges;

    下边将会从八个地点开展总计:

 

翻看数据库(表卡塔尔(قطر‎的字符集编码:

    1.数量定义语言(DDL)

/* 数据操作 */ ------------------
-- 增
insert [into] 表名 [(字段列表卡塔尔(英语:State of Qatar)] values (值列表)[, (值列表), ...]
-- 假使要插入的值列表包括全体字段並且逐大器晚成少年老成致,则能够省略字段列表。
-- 可同期插入多条数据记录!
replace 与 insert 完全黄金年代致,可交流。
insert [into] 表名 set 字段名=值[, 字段名=值, ...]
-- 查
select 字段列表 from 表名[ 其余子句]
-- 可来自八个表的多个字段
-- 别的子句能够不使用
-- 字段列表能够用*代表,表示具备字段
-- 删
delete from 表名[ 删除条件子句]
从未有过准则子句,则会去除全体
-- 改
update 表名 set 字段名=新值[, 字段名=新值] [履新规范]

  show create(表) database 数据库名;

    2.数据操作语言(DML)

/* 字符集编码 */ ------------------
-- mysql、数据库、表、字段均可设置编码
-- 数据编码与客商端编码不需意气风发致
show variables like 'character_set_%' -- 查看全数字符集编码项
character_set_client 顾客端向服务器发送数据时利用的编码
character_set_results 服务器端将结果重临给客商端所使用的编码
character_set_connection 连接层编码
set 变量名 = 变量值
set character_set_client = gbk;
set character_set_results = gbk;
set character_set_connection = gbk;
set names gbk; -- 也就是达成以上多个设置
-- 校对集
查对集用以排序
show character set [like 'pattern']/show charset [like 'pattern'] 查看全体字符集
show collation [like 'pattern'] 查看全部核对集
charset 字符集编码 设置字符集编码
collate 核查集编码 设置核对集编码

一时退换数据库的字符集:

    3.数量查询语言(DQL)

/* 数据类型(列类型) */ ------------------

  SET GLOBAL character_set_server=utf8;

    4.函数

  1. 数值类型
    -- a. 整型 ----------
    种类 字节 范围(有暗号位)
    tinyint 1字节 -128 ~ 127 无标识位:0 ~ 255
    smallint 2字节 -32768 ~ 32767
    mediumint 3字节 -8388608 ~ 8388607
    int 4字节
    bigint 8字节

上边是一些创办数据库和表首要的一声令下。

    本篇小结大多数是语句格式,如若要求代码达成的截图,以至一些额外知识点标明,能够下载安装xmind软件后,下载云盘里的观念导图进行查看。

int(m卡塔尔国 m表示总位数

  (1).创造数据库:creat database 数据库名;

链接: 密码:qrie

  • 暗中同意存在符号位,unsigned 属性改过
  • 显示上升的幅度,假如有个别数相当不足定义字段时设置的位数,则前面以0补填,zerofill 属性改革
    例:int(5卡塔尔 插入贰个数'123',补填后为'00123'
  • 在满意必要的景况下,越小越好。

    1代表bool值真,0代表bool值假。mysql没有布尔类型,通过整型0和1意味。常用tinyint(1卡塔尔表示布尔型。

     使用数据库:use 数据库名;

ximd内容如下:

-- b. 浮点型 ----------
类型 字节 范围
float(单精度) 4字节
double(双精度) 8字节
浮点型既帮助符号位 unsigned 属性,也协理显得升幅 zerofill 属性。
差别于整型,前后均会补填0.
概念浮点型时,需点名总位数和小数位数。
float(m, d) double(m, d)
m表示总位数,d表示小数位数。
m和d的大小会决定浮点数的约束。分歧于整型的固定范围。
m既代表总位数(不包罗小数点和正负号),也意味着显示上涨的幅度(全部呈现符号均包罗)。
扶持科学计数法表示。
浮点数表示相符值。

  (2).展现你成立的数据库(已供你筛选你要使用的数据库):show databases;

澳门新濠3559 1

-- c. 定点数 ----------
decimal -- 可变长度
decimal(m, d卡塔尔 m也意味总位数,d表示小数位数。
保存三个标准的数值,不会时有发生多少的修正,差异于浮点数的四舍五入。
将浮点数调换为字符串来保存,每9位数字保存为4个字节。

  (3).删除数据库(审慎使用此命令):drop database 数据库名;

 

  1. 字符串类型
    -- a. char, varchar ----------
    char 定长字符串,速度快,但浪费空间
    varchar 变长字符串,速度慢,但节省空间
    m表示能积累的最大尺寸,此尺寸是字符数,非字节数。
    现在和过去特不相通的编码,所据有的上空不一样。
    char,最多2五十个字符,与编码毫无干系。
    varchar,最多65535字符,与编码有关。
    一条有效记录最大无法超过655三十几个字节。
    utf8 最大为21844个字符,gbk 最大为32766个字符,latin1 最大为65532个字符
    varchar 是变长的,要求动用存款和储蓄空间保存 varchar 的长短,假如数据低于2伍拾二个字节,则应用三个字节来保存长度,反之须要多少个字节来保存。
    varchar 的最大实用长度由最大行大小和选取的字符集明确。
    最大使得长度是65532字节,因为在varchar存字符串时,第贰个字节是空的,不设有其余数据,然后还需八个字节来寄放在字符串的尺寸,所以有效长度是64432-1-2=65532字节。
    例:若多少个表定义为 create table tb(c1 int, c2 char(30卡塔尔国, c3 varchar(n卡塔尔卡塔尔(قطر‎charset=utf8; 问n的最大值是有一些? 答:(65535-1-2-4-30*3)/3

  (4).显示表的内容:show tables;

数量定义语言(DDL):

-- b. blob, text ----------
blob 二进制字符串(字节字符串)
tinyblob, blob, mediumblob, longblob
text 非二进制字符串(字符字符串)
tinytext, text, mediumtext, longtext
text 在概念时,不要求定义长度,也不会思量总参谋长度。
text 类型在概念时,不可给default值

  (5). 重命表名:alter table 原表名 rename to 新表名;

1.建表:

create table 表名(                                                    create table test(

          列名称1 数据类型 ,                                                           id int,

          列名称2 数据类型,                                                            name char(10卡塔尔(英语:State of Qatar),

          .........                                                                                    ......

          列名称n 数据类型);                                                       birthday date卡塔尔(قطر‎;

常用的数据类型:整数(int,tinyint,smallint),小数(float,decimal),字符串(char,varchar),时间(date,time)

-- c. binary, varbinary ----------
看似于char和varchar,用于保存二进制字符串,相当于保存字节字符串而非字符字符串。
char, varchar, text 对应 binary, varbinary, blob.

  (6).增多字段:alter table 表名 add 字段名 字段类型 字段属性;

2.约束:

primary key(主键):限定唯风姿罗曼蒂克标记数据库表中的每条记下

foreign key(外键):foreign key正是表与表之间的某种约定的涉嫌,从一个表指向另贰个表

unique:约束用于限定参与表的多寡的品种

建表时可在数据类型后增添:

create table test(id int primary key);

create table test(id int,primary key(id);

恐怕建表时未加多,后边须求时再增加:

alter table test add primary key(id);

剔除主键:alter table test drop primary key;

unique的用法与primary key 相近。

外键的用法:

create table t1(id int primary key,name char(10));

create table t2(id int primary key,pri_id int,name char(10),

constraint i foreign key(pri_id) references t1(id));

意思为:把t2中的pri_id 作为外键,指向t1中的主键id

删除了这么些之外键:constraint i,把外键命名成i,方便了大家删除了这几个之外键

alter table t2 drop foreign key i; 

  1. 日未时间项目
    日常用整型保存时间戳,因为php能够很方便的将时刻戳举办格式化。
    datetime 8字节 日期及时间 1000-01-01 00:00:00 到 9999-12-31 23:59:59
    date 3字节 日期 1000-01-01 到 9999-12-31
    timestamp 4字节 时间戳 19700101000000 到 2038-01-19 03:14:07
    time 3字节 时间 -838:59:59 到 838:59:59
    year 1字节 年份 1901 - 2155

  (7).修改字段名:alter table 字段名 change 新字段名;

3.字段属性

1.unsigned(无符号型),只可以用在数值型字段

2.zerofill(自动补零),只可以用在数值型字段,前导零,同时该字段自动式UNSIGNED

3.AUTO_INCREMENT(自动拉长),寄生于主键

4.NOT NULL:强制约束列不守NULL值,即不增添数值就无法插入数据

5.缺省值(default):给多少三个私下认可值(系统私下认可值是NULL卡塔尔(قطر‎,无法与auto_increment同期用于一个字段上

写法均为:create table test(id int 字段属性卡塔尔;

 


datetime “yyyy-mm-dd hh:mm:ss”
timestamp “yy-mm-dd hh:mm:ss”
“yyyymmddhhmmss”
“yymmddhhmmss”
yyyymmddhhmmss
yymmddhhmmss
date “yyyy-mm-dd”
“yy-mm-dd”
“yyyymmdd”
“yymmdd”
yyyymmdd
yymmdd
time “hh:mm:ss”
“hhmmss”
hhmmss
year “yyyy”
“yy”
yyyy
yy

  (8).删除字段: alter table 表名 drop 字段名;

DML(数据操作语言):

  1. 枚举和聚合
    -- 枚举(enum) ----------
    enum(val1, val2, val3...)
    在已知的值中开展单选。最大数额为65535.
    枚举值在保留时,以2个字节的整型(smallint卡塔尔(قطر‎保存。每种枚举值,按保存的职分顺序,从1开端相继依次增加。
    展现为字符串类型,存款和储蓄却是整型。
    null值的目录是null。
    空字符串错误值的索引值是0。

  (9).删除表:drop table 表名;

1.索引:

创建:create index 索引名 on 表名(字段);            create index i on test(id);

删除:drop index 索引名;                                        drop index i;

-- 集合(set) ----------
set(val1, val2, val3...)
create table tab ( gender set('男', '女', '无') );
insert into tab values ('男, 女');
最多能够有63个例外的积极分子。以bigint存款和储蓄,共8个字节。接纳位运算的款式。
当成立表时,set成员值的尾巴部分空格将电动被删去。

在navicat下对表的意气风发对操作:

2.对数码操作:

/* 选选择优秀者良品种 */
-- php角度

  show create table 表名(能够以代码格式查看你的表卡塔尔国;

insert(插入):

插入单独数据:insert into 表名 字段1、字段2... values(值1、值2...);

计划暗许数据:insert inro 表名 values(值1、值2...卡塔尔;

insert into test(id,name) values(008,'周星星');

  1. 成效满意
  2. 积攒空间尽量小,管理功效更加高
  3. 思虑宽容难点

  在装置time 的时候 想让它私下认可当前岁月,和各类表必需有二个主键,假设你未曾什么能设置主键的字段,就用auto_increment自增列为主键。该字段属性也要加多primary key

update(修改、更新):修改(更新)数据:update 表名 set 字段=新值 where 列名称=某值

update test set name='詹姆斯' where id=008;

校订多条数据:

update test set name=case id

when 001 then 'qwe'

when 002 then 'asd'

end

where id in(001,002)

-- ip存储 ----------

建表:

replace(批量翻新数据)(也可用来数据拉长):replace into 表名(字段1、字段2...卡塔尔(英语:State of Qatar) values(值1、值2...卡塔尔(قطر‎

replace into test(id,name) values(002,'777');

未加多的数额会默以为null

  1. 只需寄放,可用字符串
  2. 假如需总括,查找等,可存款和储蓄为4个字节的无符号int,即unsigned
    1卡塔尔国 php函数转换
    ip2long可转换为整型,但会现出指导符号难点。需格式化为无符号的整型。
    行使sprintf函数格式化字符串
    sprintf("%u", ip2long('192.168.3.134'));
    接下来用long2ip将整型转回ip字符串
    2卡塔尔(英语:State of Qatar) mysql函数转变(无符号整型,unsigned卡塔尔(قطر‎
    inet_aton('127.0.0.1'卡塔尔国 将ip转为整型
    inet_ntoa(2130706433卡塔尔(قطر‎ 将整型转为ip

  create table 表名(

批量立异(通过update):

insert into test(id,name) values(001,'i am 001'),(002,'i am 002')

on duplicate key update

id=values(id),name=values(name);

 

  字段名 数据类型 约束,

delete删除数据(一条):delete from 表名 where 条件

delete from test where id=001;

/* 列属性(列约束) */ ------------------

  .............

 

  1. 主键

);

3.对表操作

  • 能唯生机勃勃标记记录的字段,能够看成主键。
  • 四个表只可以有贰个主键。
  • 主键具备唯大器晚成性。
  • 扬言字段时,用 primary key 标记。
    也得以在字段列表之后注解
    例:create table tab ( id int, stu varchar(10), primary key (id));
  • 主键字段的值不能够为null。
  • 主键能够由多少个字段同盟组成。那时候急需在字段列表后宣称的点子。
    例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age));

建表首要约束:

修改表名:alter table 旧表名 rename as 新表名;

alter table test rename as father;

  1. unique 唯一索引(唯生龙活虎限定)
    使得某字段的值也不可能再度。

  2. null 约束
    null不是数据类型,是列的贰个特性。
    意味着近年来列是不是可认为null,表示什么都未有。
    null, 允许为空。暗许。
    not null, 不许为空。
    insert into tab values (null, 'val');
    -- 那时表示将首先个字段的值设为null, 决议于该字段是或不是允许为null

  3. default 暗中认可值属性
    脚下字段的默许值。
    insert into tab values (default, 'val'卡塔尔国; -- 这时候意味着强制行使暗许值。
    create table tab ( add_time timestamp default current_timestamp );
    -- 表示将目几日前子的年华戳设为暗中同意值。
    current_date, current_time

  4. auto_increment 自动增加度节制
    机动拉长必得为索引(主键或unique)
    只好存在一个字段为活动拉长。
    默以为1上马自行增加。能够由此表属性 auto_increment = x举行安装,或 alter table tbl auto_increment = x;

  5. comment 注释
    例:create table tab ( id int 卡塔尔 comment '注释内容';

  6. foreign key 外键限制
    用以限定主表与从表数据完整性。
    alter table t1 add constraint `t1_t2_fk` foreign key (t1_id) references t2(id);
    -- 将表t1的t1_id外键关联到表t2的id字段。
    -- 各种外键都有叁个名字,能够因而 constraint 钦赐

 主键: primary key,外键: foreign key,自增字段(适用于主键不分明的状态下卡塔尔:auto_increment,设置唯风流倜傥(和主键相似卡塔尔:unique,非空:not null,暗许值:default.

改良字段的数据类型:alter table 表名 modify 字段名 数据类型

alter table test modify id char(10);

留存外键的表,称之为从表(子表),外键指向的表,称之为主表(父表)。

 一些数据库不支持列级外键,所以提出建表使用行级外键.

订正字段名:alter table 表名 change 字段名 新字段名 数据类型; 

alter table test change name address char(50);

成效:保持数据生龙活虎致性,完整性,首要指标是决定期存款款和储蓄在外键表(从表)中的数据。

 行级外键创设方法:

日增字段:alter table 表名 add 字段名1 数据类型

alter table test add address char(30);

mysql中,能够对innodb引擎使用外键限制:
语法:
foreign key (外键字段) references 主表名 (关联字段卡塔尔国 [主表记录删除时的动作] [主表记录更新时的动作]
此刻急需检验三个从表的外键需求约束为主表的已存在的值。外键在向来不提到的情状下,能够安装为null.前提是该外键列,没有not null。

 foreign key 该表外键字段名 references 表名(主键字段名卡塔尔(英语:State of Qatar);

剔除字段:alter table 表名 drop 字段名;

alter table test drop address;

 


能够不内定主表记录改进或更新时的动作,那么那时主表的操作被驳倒。
假诺钦点了 on update 或 on delete:在剔除或更新时,好似下多少个操作可以选拔:
1. cascade,级联操作。主表数据被更新(主键值更新),从表也被更新(外键值更新)。主表记录被去除,从表相关记录也被删去。

对表增多字段:

DQL(数据查询语句insert):

  1. set null,设置为null。主表数据被更新(主键值更新),从表的外键被安装为null。主表记录被去除,从表相关记录外键被设置成null。但只顾,必要该外键列,没有not null属性节制。
  2. restrict,推却父表删除和换代。

    alter table 表名 add column 列名 节制标准;

1.时断时续查询:select 表1.字段,表2.字段 from 表1,表2;

小心,外键只被innodb存款和储蓄引擎所扶植。其余斯特林发动机是不帮助的。

对表本来就有字段增加外键节制:

多表联合查询:select 表1.字段,表2.字段 from 表1,表2 where 表1.id=表2.id;

select * from t1,t2 where t1.id=t2.id;

/* 建表规范 */ ------------------
-- normal format, nf

    alter table 表名 add foreign key (字段名卡塔尔(英语:State of Qatar) references 外表表名(外表主键名卡塔尔国

2.询问不另行的数目:select distinct 字段 from 表名;

select distinct id from test;

  • 各样表保存一个实体音讯
  • 种种具有八个id字段作为主键
  • id主键 + 原子表
    -- 1nf, 第大器晚成范式
    字段不能再分,就满意第大器晚成范式。
    -- 2nf, 第二范式
    满足第生机勃勃范式的前提下,不能够现身部分信赖。
    解除契合主键就足以免止有些信任。扩张单列关键字。
    -- 3nf, 第三范式
    满足第二范式的前提下,不能够现身传递信赖。
    有些字段重视于主键,而有别的字段正视于该字段。那便是传递注重。
    将八个实体消息的数量放在三个表内完毕。

向表插入数据:

3.取别名alias:select * from 表名 as 别名;

自连接:select b.* from shop as a,shop as b where a.name='包子' and a.price

把shop表取外号叫a,b,通过a和b举办自身多少的对照

/* select */ ------------------

  insert into 表名(字段名1,字段名2.......) values(数据1,数据2........);

4.limit(偏移量):

查询前n条数据:select *from 表名 limit n;

询问前n条数据后的i条数据:select *from 表名 limit n,i;

select [all|distinct] select_expr from -> where -> group by [左券函数] -> having -> order by -> limit

删去表数据:

5.in(在where后显明三个值):select 字段 from 表名 where 字段 in(值1,值2卡塔尔(英语:State of Qatar);

select * from test where id in(1,2,3);

a. select_expr
-- 可以用 * 表示具有字段。
select * from tb;
-- 能够采纳表达式(计算公式、函数调用、字段也是个表明式)
select stu, 29+25, now() from tb;
-- 可以为各种列使用别名。适用于简化列标志,制止三个列标记符重复。

  delete from 表名

6.like(用于where子句中找出列中的钦定格局):select 字段 from 表名 where 字段 like 表明式;

例如说寻觅王姓弱冠之年:

select *from test where name like'王%';

%:表示0~多少个字符

_:表示八个字符

  • 运用 as 关键字,也可省略 as.
    select stu+10 as add10 from tb;

  where 条件;

7.order by(排序):select 字段 from 表名 order by 字段(排序方式) [desc](使用倒序排列)

select * from test order by id desc;

表示经过id从大到小举办排序展现

b. from 子句
用于标志查询来源。
-- 可以为表起小名。使用as关键字。
select * from tb1 as tt, tb2 as bb;
-- from子句后,可以同有时候现身多少个表。
-- 三个表会横向叠合到一起,而数据会形成叁个笛Carl积。
select * from tb1, tb2;

查询表数据:

8.join连接:

inner jor(内连接),left join(左连接),right join(右连接)

full join(全连接)(mysql不扶助全连接)

格式都风度翩翩致:select 字段 from 表1 inner/left/right join 表2 on 表1.字段=表2.字段;

c. where 子句
-- 从from拿到的数据源中开展筛选。
-- 整型1表示真,0表示假。
-- 表明式由运算符和平运动算数组成。
-- 运算数:变量(字段)、值、函数重回值
-- 运算符:
=, <=>, <>, !=, <=, <, >=, >, !, &&, ||,
in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor
is/is not 加上ture/false/unknown,核准某些值的真假
<=>与<>成效切合,<=>可用来null相比

  select 字段1,字段2..... from 表名

9.union(联合查询):select *from 表1 union select *from 表2;

 


d. group by 子句, 分组子句
group by 字段/别名 [排序方式]
分组后会进行排序。升序:asc,降序:desc

  where 条件;

函数:

以下[协调函数]需配合 group by 使用:
count 重返差别的非null值数目 count(*)、count(字段)
sum 求和
max 求最大值
min 求最小值
avg 求平均值
group_concat 重返带有来自一个组的连接的非null值的字符串结果。组内字符串连接。

修正表数据:

1.合集函数:操作面向生龙活虎多元的值,并回到叁个十足的值

写法都同意气风发:

查询某列的平均值:select avg(字段) from 表名;

回来某列的行数:select count(字段卡塔尔国 from 表名;

查询某列最大值:select max(字段) from 表名;

询问某列最小值:select min(字段) from 表名;

归来某列总和:select sum(字段卡塔尔(قطر‎ from 表名;

分组呈现总和:select sum(字段卡塔尔国 from 表名 group by 字段;

e. having 子句,条件子句
与 where 功效、用法相似,试行机遇比不上。
where 在开首时进行检验数据,对原数据开展过滤。
having 对挑选出的结果再行张开过滤。
having 字段必得是查询出来的,where 字段必得是数据表存在的。
where 无法运用字段的小名,having 能够。因为推行where代码时,只怕未有规定列值。
where 不得以应用公约函数。日常需用合计函数才会用 having
sql标准必要having必得援引group by子句中的列或用来合计函数中的列。

  update 表名

2.标量函数:操作面向有个别单豆蔻年华的值,并赶回基于输入值的三个纯粹的值

写法也都风流倜傥致:

ucase(把字段的值调换为题写):select ucase(字段) from 表名;

lcase(把字段的值变换为题写):select lcase(字段) from 表名;

mid(提取字符):mid(字段,起首,截至):

select mid(name,2,3) from test;

代表从name列的第贰个数据最早,每一种数据只展现3位

len(重返文本长度):select length(字段卡塔尔国 from 表名;

round(把数值四舍五入,并保存相应小数位):select round(字段,数字卡塔尔(英语:State of Qatar) from 表名;

now()(查询当明天子):select now(卡塔尔国 from 表名;(有多少个数据就涌出多少个)

 


    此小说纵然是本身的上学小结,而且仍旧身为初读书人的本人写的,但也冀望更加的多的爱侣能见到小编的稿子,假设有白璧微瑕或难点,应接到留言区留言。

f. order by 子句,排序子句
order by 排序字段/外号 排序形式 [,排序字段/小名 排序情势]...
升序:asc,降序:desc
扶植两个字段的排序。

  set 字段名=值

g. limit 子句,约束结果数量子句
仅对拍卖好的结果举办多少节制。将管理好的结果的作为是一个聚众,依据记录现身的相继,索引从0最早。
limit 初叶地点, 获取条数
回顾第三个参数,表示从索引0起头。limit 获取条数

  where 条件;

h. distinct, all 选项
distinct 去除重复记录
默以为 all, 全体记下

------创办视图--------------------

/* union */ ------------------
将八个select查询的结果组合成三个结实会集。
select ... union [all|distinct] select ...
暗中同意 distinct 方式,即具备重回的行都以举世无双的
提出,对各样select查询加上小括号包裹。
order by 排序时,需加上 limit 举办结合。
亟需各select查询的字段数量同样。
各样select查询的字段列表(数量、类型卡塔尔国应平等,因为结果中的字段名以第一条select语句为准。

  create view 视图名 as

/* 子查询 */ ------------------

  slelect 列名1,列名2 ...from 表名

  • 子查询需用括号包裹。
    -- from型
    from后供给是三个表,必须给子查询结果取个别名。
  • 简化每一种查询内的原则。
  • from型需将结果生成一个临时表格,可用以原表的锁定的释放。
  • 子查询再次来到一个表,表型子查询。
    select * from (select * from tb where id>0) as subfrom where id>1;
    -- where型
  • 子查询重临二个值,标量子查询。
  • 无需给子查询取别称。
  • where子查询内的表,无法一直用来更新。
    select * from tb where money = (select max(money) from tb);
    -- 列子查询
    假如子查询结果重回的是一列。
    利用 in 或 not in 实现查询
    exists 和 not exists 条件
    若是子查询重临数据,则赶回1或0。常用于剖断典型。
    select column1 from t1 where exists (select * from t2);
    -- 行子查询
    查询条件是二个行。
    select * from t1 where (id, gender) in (select id, gender from t2);
    行布局符:(col1, col2, ...卡塔尔国 或 row(col1, col2, ...卡塔尔(英语:State of Qatar)
    行结构符经常用于与对能回来七个或三个以上列的子查询举办比较。

-- 特殊运算符
!= all() 相当于 not in
= some() 相当于 in。any 是 some 的别名
!= some(卡塔尔 不均等 not in,不等于在那之中某一个。
all, some 可以合营别的运算符一同行使。

--------创制函数-----------------

/* 连接查询(join卡塔尔(英语:State of Qatar) */ ------------------
将三个表的字段实行连接,能够钦点连接条件。
-- 内连接(inner join)

create function 函数名(形参1,形参2......)

  • 默许正是内接连,可省略inner。
  • 唯有数量存在时技艺发送连接。即三回九转结果不可能现身空行。
    on 代表连接条件。其尺度表达式与where相通。也可以省略条件(表示原则永恒为真)
    也可用where表示连接条件。
    再有 using, 但需字段名相通。 using(字段名卡塔尔

returns 再次来到值类型

-- 交叉连接 cross join
即,未有原则的内连接。
select * from tb1 cross join tb2;
-- 外连接(outer join)

begin

  • 万生机勃勃数量一纸空文,也会冒出在连接结果中。
    -- 左外连接 left join
    要是数量不设有,左表记录会现身,而右表为null填充
    -- 右外接连 right join
    倘若数量不设有,右表记录会现身,而左表为null填充
    -- 自然连接(natural join卡塔尔
    电动剖断连接条件形成连接。
    一定于轻便了using,会自行搜索相符字段名。
    natural join
    natural left join
    natural right join

  函数体

select info.id, info.name, info.stu_num, extra_info.hobby, extra_info.sex from info, extra_info where info.stu_num = extra_info.stu_id;

  retrun 返回值

/* 导入导出 */ ------------------
select * into outfile 文件地方 [支配格式]澳门新濠3559, from 表名; -- 导出表数据
load data [local] infile 文件地方 [replace|ignore] into table 表名 [决定格式]; -- 导入数据
调换的数码暗中认可的相间符是制表符
local未钦定,则数据文件必需在服务器上
replace 和 ignore 关键词调整对现有的唯生机勃勃键记录的双重的拍卖
-- 调节格式
田野s 调节字段格式
默认:fields terminated by 't' enclosed by '' escaped by '\'
terminated by 'string' -- 终止
enclosed by 'char' -- 包裹
escaped by 'char' -- 转义
-- 示例:
select a,b,a+b into outfile '/tmp/result.text'
fields terminated by ',' optionally enclosed by '"'
lines terminated by 'n'
from test_table;
lines 调节行格式
默认:lines terminated by 'n'
terminated by 'string' -- 终止

end

/* insert */ ------------------
select语句获得的多少年足球以用insert插入。

执行:select 函数名(实参1,实参2...........)

可以省略对列的钦定,需求 values (卡塔尔国括号内,提必要了如约列顺序现身的具备字段的值。
大概应用set语法。
insert into tbl_name set field=value,...;


能够一次性使用多少个值,选拔(卡塔尔国, (卡塔尔(英语:State of Qatar), (卡塔尔国;的样式。
insert into tbl_name values (), (), ();

-----------函数if语句-------------

能够在列值指按时,使用表明式。
insert into tbl_name values (field_value, 10+10, now());
能够利用叁个优异值 default,表示该列使用默许值。
insert into tbl_name values (field_value, default);

if(条件块) then 执行体

可以透过二个查询的结果,作为必要插入的值。
insert into tbl_name select ...;

else if(条件块) then 执行体

能够钦命在插入的值现身主键(或独一索引)矛盾时,更新任何非主键列的新闻。
insert into tbl_name values/set/select on duplicate key update 字段=值, …;

......................

/* delete */ ------------------
delete from tbl_name [where where_definition] [order by ...] [limit row_count]

else 执行体

根据典型删除

end if

点名删除的最多记录数。limit


可以因而排序条件删除。order by + limit

-------------函数case语句------

支撑多表删除,使用相同连接语法。
delete from 要求删除数据多表1,表2 using 表连接操作 条件。

case

/* truncate */ ------------------
truncate [table] tbl_name
清空数据
去除重新构建表

  when 条件块 then 执行体

区别:
1,truncate 是去除表更创造,delete 是逐个删除
2,truncate 重置auto_increment的值。而delete不会
3,truncate 不精通删除了几条,而delete知道。
4,当被用于带分区的表时,truncate 会保留分区

  when 条件块 then 执行体

/* 备份与还原 */ ------------------
备份,将数据的构造与表内数据保存起来。
行使 mysqldump 指令完毕。

....

-- 导出

end case

  1. 导出一张表
      mysqldump -u用户名 -p密码 库名 表名 > 文件名(d:/a.sql)
  2. 导出多张表
      mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(d:/a.sql)
  3. 导出全部表
      mysqldump -u用户名 -p密码 库名 > 文件名(d:/a.sql)
  4. 导出多少个库
      mysqldump -u用户名 -p密码 -b 库名 > 文件名(d:/a.sql)

能够-w指点备份条件

-----------储存进度---------------
create procedure 存储名(形参1,形参2....)
begin
  程序体
end
参数类型:
in out inout

-- 导入

执行:call 存储名(实参1,实参2..................)

  1. 在报到mysql的景况下:
      source 备份文件
  2. 在不记名的意况下
      mysql -u顾客名 -p密码 库名 < 备份文件

/* 视图 */ ------------------
何以是视图:
视图是叁个虚构表,其内容由询问定义。同实际的表一样,视图包蕴生龙活虎连串蕴含名称的列和行数据。可是,视图并不在数据库中以存款和储蓄的多寡值集方式存在。行和列数据来自由定义视图的询问所引述的表,而且在引用视图时动态变化。
视图具备表布局文件,但子虚乌有数据文件。
对在那之中所引述的幼功表来讲,视图的效用相仿于挑选。定义视图的筛选能够来自当前或任何数据库的二个或多个表,或许其余视图。通过视图举办询问未有此外限定,通过它们实行数据改善时的节制也相当少。
视图是积存在数据库中的查询的sql语句,它根本由于三种原因:安全原因,视图能够掩盖一些多少,如:社保基金表,能够用视图只展示姓名,地址,而不显示社会保证号和工资数等,另生机勃勃缘故是可使复杂的查询易于通晓和利用。

mysql数据类型:

-- 创设视图
create [or replace] [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement

char[length] length字节 定长字段,长度为0-251个字节
varchar[length] string  长度+1字节 变长字段,在mysql5.03在先,长度为0-251个字节,在5.0.3今后,最大尺寸为65535字节。贰个utf8字符占3个字节、八个gbk字符占七个字节。
tinytext string  长度+1字节 字符串,长度为0-255个字节
text string  长度+2字节 字符串,最大尺寸为0-65533个字节
mediumtext string长  度+3字节 字符串,最大尺寸为167772十两个字节
longtext string  长度+4字节 字符串,最大尺寸为4一九四七672九十五个字节
tinyint[length] 1字节 范围:-128~127或0~255
smallint[length] 2字节 
mediumint[length] 3字节 
int[length] 4字节 
bigint[length] 8字节 
float 4字节 
double[length,decimals] 8字节 运维稳固的小数点
decimal[length,decimals] length+1字节或length+2字节 

  • 视图名必需唯风流倜傥,相同的时间无法与表重名。
  • 视图能够动用select语句询问到的列名,也足以本人钦点相应的列名。
  • 能够钦点视图实施的算法,通过algorithm内定。
  • column_list就算存在,则数目必需等于select语句检索的列数

date 3字节 采用YYYY-MM-DD格式
datetime 8字节 采用YYYY-MM-DD HH:mm:SS格式
timestamp 4字节 采用YYYYMMDDHHmmSS格式
time 3字节 采用HH:MM:SS格式
enum 1或2字节 枚举类型
set 1、2、3、4或8字节 与enum雷同,只可是每一列能够有所三个或者的值
blob   是text的叁个变体。允许存款和储蓄二进制文件,还可用于有个别加密数据。

-- 查看布局
show create view view_name

-- 删除视图

  • 删除视图后,数据照旧存在。
  • 可同一时候删除八个视图。
    drop view [if exists] view_name ...

-- 校重视图布局

  • 诚如不改正视图,因为不是独具的翻新视图都会炫目到表上。
    alter view view_name [(column_list)] as select_statement

-- 视图功能

  1. 简化作业逻辑
  2. 对顾客端遮盖真实的表布局

-- 视图算法(algorithm卡塔尔(قطر‎
merge 合并
将视图的查询语句,与外表查询须求先统再三实行!
temptable 临时表
将视图实践完成后,产生有时表,再做外层查询!
undefined 未定义(暗许卡塔尔(英语:State of Qatar),指的是mysql自己作主去选用相应的算法。

 

/* 事务(transaction) */ ------------------
职业是指逻辑上的生机勃勃组操作,组成那组操作的顺序单元,要不全成功要不全退步。

  • 帮助三番五次sql的公共成功或公共收回。
  • 事务是数据库在数据晚自习方面包车型地铁多少个效应。
  • 亟需利用 innodb 或 bdb 存款和储蓄引擎,对机动提交的特性扶持达成。
  • innodb被称为事务安全型引擎。

-- 事务开启
start transaction; 或者 begin;
开启事务后,全体被实行的sql语句均被认作当前政工内的sql语句。
-- 事务提交
commit;
-- 事务回滚
rollback;
如若某些操作发生难点,映射到职业开启前。

-- 事务的性状

  1. 原子性(atomicity)
    政工是三个不可分割的干活单位,事务中的操作依旧都产生,要么都不发生。
  2. 一致性(consistency)
    事务前后数据的完整性必得保持风姿罗曼蒂克致。
  • 专业在这里早前和终止时,外部数据意气风发致
  • 在方方面面业务进度中,操作是接连的
  1. 隔离性(isolation)
    四个客商并发访谈数据库时,叁个客商的事情不能够被其它客户的事物所困扰,多个冒出事务之间的数据要互相隔断。
  2. 持久性(durability)
    三个业务生机勃勃旦被提交,它对数据库中的数据变动便是永恒性的。

-- 事务的实现

  1. 务求是事情帮助的表类型
  2. 实行大器晚成组有关的操作前开启事务
    3. 整组操作完结后,都立业成家,则交由;倘使存在破产,选拔回滚,则会回到事情开始的备份点。

-- 事务的原理
运用innodb的活动提交(autocommit卡塔尔国个性成就。
平凡的mysql实践语句后,当前的多寡交由操作均可被此外客商端可以知道。
而事情是不常关闭“自动提交”机制,须要commit提交漫长化数据操作。

-- 注意
1. 多少定义语言(ddl)语句不可能被回滚,比方创建或吊销数据库的言辞,和创办、打消或纠正表或存储的子程序的说话。

  1. 事情不能够被嵌套

-- 保存点
savepoint 保存点名称 -- 设置贰个工承保存点
rollback to savepoint 保存点名称 -- 回滚到保存点
release savepoint 保存点名称 -- 删除保存点

-- innodb自动提交本性设置

set autocommit = 0|1; 0表示关闭自动提交,1意味开启自动提交。

若果关闭了,那平常操作的结果对任何顾客端也不可以看到,需求commit提交后技巧长久化数据操作。

  • 也得以关闭自动提交来开启事务。但与start transaction不相同的是,
    set autocommit是恒久改造服务器的安装,直到后一次再一次改善该装置。(针对当下连接卡塔尔(قطر‎
    而start transaction记录开启前的景况,而要是事情提交或回滚后就须要重新开启事务。(针对当前业务卡塔尔(英语:State of Qatar)

/* 锁表 */
表锁定只用于幸免别的顾客端举行不正本地读取和写入
myisam 帮忙表锁,innodb 援助行锁
-- 锁定
lock tables tbl_name [as alias]
-- 解锁
unlock tables

/* 触发器 */ ------------------
接触程序是与表有关的命名数据库对象,当该表现身一定事件时,将激活该目的
监听:记录的加码、改正、删除。

-- 创造触发器
create trigger trigger_name trigger_time trigger_event on tbl_name for each row trigger_stmt
参数:
trigger_time是触发程序的动作时间。它能够是 before 或 after,以指明触发程序是在激活它的话语此前或之后触发。
trigger_event指明了激活触发程序的言辞的类型
insert:将新行插入表时激活触发程序
update:改善某意气风发行时激活触发程序
delete:从表中删除某风华正茂行时激活触发程序
tbl_name:监听的表,必得是长久性的表,不可能将触发程序与temporary表或视图关联起来。
trigger_stmt:当接触程序激活时实行的话语。实施多个语句,可采用begin...end复合语句布局

-- 删除
drop trigger [schema_name.]trigger_name

能够行使old和new取代旧的和新的数目
履新操作,更新前是old,更新后是new.
除去操作,唯有old.
追加操作,只有new.

-- 注意

  1. 对此有着同等触发程序动作时间和事件的给定表,无法有五个触发程序。

-- 字符连接函数
concat(str1[, str2,...])

-- 分支语句
if 条件 then
实行语句
elseif 条件 then
进行语句
else
施行语句
end if;

-- 改良最外层语句结束符
delimiter 自定义甘休符号
sql语句
自定义甘休符号

delimiter ; -- 改革回原本的子公司

-- 语句块包裹
begin
语句块
end

-- 特殊的推行

  1. 生机勃勃经增多记录,就能接触程序。
  2. insert into on duplicate key update 语法会触发:
    要是未有重复记录,会触发 before insert, after insert;
    即使有重复记录并更新,会触发 before insert, before update, after update;
    如果有重复记录不过并未生出更新,则触发 before insert, before update
  3. replace 语法 假若有记录,则实施 before insert, before delete, after delete, after insert

/* sql编程 */ ------------------

--// 局地变量 ----------
-- 变量评释
declare var_name[,...] type [default value]
本条讲话被用来声称局部变量。要给变量提供五个暗中同意值,请蕴涵一个default子句。值可以被钦点为三个表达式,无需为一个常数。若无default子句,起头值为null。

-- 赋值
利用 set 和 select into 语句为变量赋值。

- 注意:在函数内是足以行使全局变量(客商自定义的变量)

--// 全局变量 ----------
-- 定义、赋值
set 语句能够定义并为变量赋值。
set @var = value;
也足以动用select into语句为变量起头化并赋值。那样供给select语句只能回去风流洒脱行,不过能够是三个字段,就象征同一时间为几个变量进行赋值,变量的数目须要与查询的列数风流倜傥致。
还足以把赋值语句看作叁个表明式,通过select试行到位。那个时候为了幸免=被充任关系运算符对待,使用:=代替。(set语句能够利用= 和 :=)。
select @var:=20;
select @v1:=id, @v2=name from t1 limit 1;
select * from tbl_name where @var:=30;

select into 能够将表中查询拿到的数据赋给变量。
-| select max(height) into @max_height from tb;

-- 自定义变量名
为了制止select语句中,客商自定义的变量与系统标记符(常常是字段名)冲突,顾客自定义变量在变量名前应用@作为初叶符号。
@var=10;

- 变量被定义后,在总心得话周期都有效(登入到退出)

--// 调整布局 ----------
-- if语句
if search_condition then
statement_list
[elseif search_condition then
statement_list]
...
[else
statement_list]
end if;

-- case语句
case value when [compare-value] then result
[when [compare-value] then result ...]
[else result]
end

-- while循环
[begin_label:] while search_condition do
statement_list
end while [end_label];

- 假若需求在循环内提前截至while循环,则需求利用标签;标签需求成对现身。

-- 退出循环
分离整个循环 leave
退出当前循环 iterate
经过退出的价签决定脱离哪个循环

--// 内置函数 ----------
-- 数值函数
abs(x) -- 绝对值 abs(-10.9) = 10
format(x, d卡塔尔(英语:State of Qatar) -- 格式化千分位数值 format(1234567.456, 2卡塔尔国 = 1,234,567.46
ceil(x卡塔尔 -- 向上取整 ceil(10.1卡塔尔(قطر‎ = 11
floor(x卡塔尔 -- 向下取整 floor (10.1卡塔尔 = 10
round(x卡塔尔(قطر‎ -- 四舍五入去整
mod(m, n) -- m%n m mod n 求余 10%3=1
pi(卡塔尔(英语:State of Qatar) -- 获得圆周率
pow(m, n) -- m^n
sqrt(x卡塔尔(英语:State of Qatar) -- 算术平方根
rand() -- 随机数
truncate(x, d) -- 截取d位小数

-- 时间日期函数
now(), current_timestamp(卡塔尔(قطر‎; -- 当明天卯时间
current_date(); -- 当今日期
current_time(卡塔尔(قطر‎; -- 当前时光
date('yyyy-mm-dd hh:ii:ss'卡塔尔; -- 获取日期部分
time('yyyy-mm-dd hh:ii:ss'卡塔尔; -- 获取时间有个别
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'卡塔尔(قطر‎; -- 格式化时间
unix_timestamp(); -- 获得unix时间戳
from_unixtime(卡塔尔(英语:State of Qatar); -- 从岁月戳得到时间

-- 字符串函数
length(string) -- string长度,字节
char_length(string) -- string的字符个数
substring(str, position [,length]) -- 从str的position开始,取length个字符
replace(str ,search_str ,replace_str) -- 在str中用replace_str替换search_str
instr(string ,substring卡塔尔 -- 重返substring第二回在string中出现的地点
concat(string [,...]卡塔尔 -- 连接字串
charset(str卡塔尔国 -- 再次回到字串字符集
lcase(string卡塔尔国 -- 调换来小写
left(string, length卡塔尔国 -- 从string第22中学的侧面起取length个字符
load_file(file_name卡塔尔(قطر‎ -- 从文件读取内容
locate(substring, string [,start_position]卡塔尔国 -- 同instr,但可钦定开端地方
lpad(string, length, pad卡塔尔国 -- 重复用pad加在string初始,直到字串长度为length
ltrim(string卡塔尔(قطر‎ -- 去除前端空格
repeat(string, count) -- 重复count次
rpad(string, length, pad卡塔尔(قطر‎ --在str后用pad补充,直到长度为length
rtrim(string卡塔尔国 -- 去除后端空格
strcmp(string1 ,string2卡塔尔国 -- 逐字符对比两字串大小

-- 流程函数
case when [condition] then result [when [condition] then result ...] [else result] end 多分支
if(expr1,expr2,expr3) 双分支。

-- 聚合函数
count()
sum();
max();
min();
avg();
group_concat()

-- 别的常用函数
md5();
default();

--// 存款和储蓄函数,自定义函数 ----------
-- 新建
create function function_name (参数列表卡塔尔(قطر‎ returns 再次来到值类型
函数体

- 函数名,应该合法的标志符,而且不应当与已部分根本字冲突。

一个函数应该归属有些数据库,可以行使db_name.funciton_name的款式进行业前函数所属数据库,不然为眼下数据库。

  • 参数部分,由"参数名"和"参数类型"组成。五个参数用逗号隔断。
  • 函数体由多条可用的mysql语句,流程序调整制,变量评释等语句构成。
  • 多条语句应该利用 begin...end 语句块包涵。
  • 自然要有 return 重临值语句。

-- 删除
drop function [if exists] function_name;

-- 查看
show function status like 'partten'
show create function function_name;

-- 修改
alter function function_name 函数选项

--// 存款和储蓄进度,自定义成效 ----------
-- 定义
存积存款和储蓄进程 是一段代码(过程),存款和储蓄在数据库中的sql组成。
二个积存进度日常用于完结一段专门的学业逻辑,比如报名,交班费,订单入库等。
而四个函数常常专一与某些意义,视为其余程序服务的,要求在任何语句中调用函数才可以,而存款和储蓄进程无法被另向外调拨运输用,是本身执行通过call实施。

-- 创建
create procedure sp_name (参数列表卡塔尔(英语:State of Qatar)
过程体

参数列表:不相同于函数的参数列表,供给指明参数类型
in,表示输入型
out,表示输出型
inout,表示混合型

瞩目,未有重回值。

/* 存款和储蓄进度 */ ------------------
积累进度是大器晚成段可试行性代码的集中。相比较函数,更趋向于专业逻辑。
调用:call 过程名
-- 注意

  • 尚无再次回到值。
  • 只能单独调用,不可夹杂在别的语句中

-- 参数
in|out|inout 参数名 数据类型
in 输入:在调用进程中,将数据输入到进度体内部的参数
out 输出:在调用进程中,将进度体管理完的结果重回到客户端
inout 输入输出:既可输入,也可输出

-- 语法
create procedure 进程名 (参数列表卡塔尔
begin
过程体
end

/* 客商和权杖管理 */ ------------------
顾客新闻表:mysql.user
-- 刷新权限
flush privileges
-- 扩展顾客
create user 用户名 identified by [password] 密码(字符串)

  • 总得怀有mysql数据库的全局create user权限,或有所insert权限。
  • 只好创建客商,不可能授予权力。
  • 客商名,注意引号:如 'user_name'@'192.168.1.1'
  • 密码也需引号,纯数字密码也要加引号

    要在纯文本中钦命密码,需忽视password关键词。要把密码钦定为由password(卡塔尔(قطر‎函数重回的混编值,需富含关键字password
    -- 重命名客商
    rename user old_user to new_user
    -- 设置密码
    set password = password('密码'卡塔尔(قطر‎ -- 为当下客户安装密码
    set password for 客户名 = password('密码'卡塔尔(英语:State of Qatar) -- 为钦点客户设置密码
    -- 删除客商
    drop user 用户名
    -- 分配权限/增添客户
    grant 权限列表 on 表名 to 客商名 [identified by [password] 'password']
  • all privileges 表示具备权力
  • *.* 表示全部库的装有表
  • 库名.表名 表示某库上边包车型地铁某表
    -- 查看权限
    show grants for 用户名
    -- 查看当前顾客权限
    show grants; 或 show grants for current_user; 或 show grants for current_user();
    -- 撤废权限
    revoke 权限列表 on 表名 from 顾客名
    revoke all privileges, grant option from 客商名 -- 打消全体权力
    -- 权限层级
    -- 要动用grant或revoke,您必得有所grant option权限,并且您必需用于您正在付与或收回的权柄。
    大局层级:全局权限适用于三个加以服务器中的全部数据库,mysql.user
    grant all on *.*和 revoke all on *.*只付与和废除全局权限。
    数据库层级:数据库权限适用于七个加以数据库中的全数指标,mysql.db, mysql.host
    grant all on db_name.*和revoke all on db_name.*只付与和撤回数据库权限。
    表层级:表权限适用于壹个给定表中的全部列,mysql.talbes_priv
    grant all on db_name.tbl_name和revoke all on db_name.tbl_name只赋予和收回表权限。
    列层级:列权限适用于叁个给定表中的单一列,mysql.columns_priv
    当使用revoke时,您必得钦定与被授权列相符的列。
    -- 权限列表
    all [privileges] -- 设置除grant option之外的具备简单权限
    alter -- 允许利用alter table
    alter routine -- 订正或废除已囤积的子程序
    create -- 允许行使create table
    create routine -- 成立已囤积的子程序
    create temporary tables -- 允许行使create temporary table
    create user -- 允许利用create user, drop user, rename user和revoke all privileges。
    create view -- 允许选用create view
    delete -- 允许利用delete
    drop -- 允许选用drop table
    execute -- 允许客商运维已囤积的子程序
    file -- 允许使用select...into outfile和load data infile
    index -- 允许接收create index和drop index
    insert -- 允许利用insert
    lock tables -- 允许对您抱有select权限的表使用lock tables
    process -- 允许行使show full processlist
    references -- 未被试行
    reload -- 允许行使flush
    replication client -- 允许顾客通晓从属服务器或主服务器之处
    replication slave -- 用于复制型从属服务器(从主服务器中读取二进制日志事件)
    select -- 允许接纳select
    show databases -- 呈现全部数据库
    show view -- 允许使用show create view
    shutdown -- 允许行使mysqladmin shutdown
    super -- 允许利用change master, kill, purge master logs和set global语句,mysqladmin debug命令;允许你连接(三遍),纵然已落得max_connections。
    update -- 允许利用update
    usage -- “无权力”的同义词
    grant option -- 允许付与权限

/* 表维护 */
-- 剖析和存款和储蓄表的重点字分布
analyze [local | no_write_to_binlog] table 表名 ...
-- 检查二个或多个表是不是有错误
check table tbl_name [, tbl_name] ... [option] ...
option = {quick | fast | medium | extended | changed}
-- 收拾数据文件的零散
optimize [local | no_write_to_binlog] table tbl_name [, tbl_name] ...

/* 杂项 */ ------------------
1. 可用反引号(`)为标记符(库名、表名、字段名、索引、别称)包裹,以幸免与注重字重名!中文也能够看作标志符!

  1. 各类库目录存在三个封存当前数据库的选项文件db.opt。
  2. 注释:
    单行注释 # 注释内容
    多行注释 /* 注释内容 */
    单行注释 -- 注释内容 (标准sql注释风格,供给双破折号后加风流倜傥空格符(空格、tab、换行等)卡塔尔(英语:State of Qatar)
  3. 方式通配符:
    _ 放肆单个字符
    % 任性五个字符,以致满含零字符
    单引号供给张开转义 '
  4. cmd命令行内的语句甘休符可感觉 ";", "g", "g",仅影响展现结果。其余地点照旧用分号结束。delimiter 可改正当前对话的话语结束符。
  5. sql对大小写不敏感
  6. 消弭原来就有语句:c

编辑:数据库 本文来源:此前在校学习期间,查看数据库(表)的字符集编码

关键词: