1. 登入相关

MySQL常用数据类型
整数:tinyint,smallint,int,bight
浮点数:float(p(所占总位数)、s(小数点所占位数))4字节
double(p、s)8字节
定点数:decimal(p、s)
日期/时间:data、time、datatime
文本:char、varchar、text
二进制:bit
1.整形
MYSQL数据类型-整型
TINYINT——1个字节—负128~127 ,无符号0到255
SMALLINT- –2个字节—-负32768到32767, 0到65535
MEDIUMINT—-3个字节—负8388608到8388607, 0到16777215
INT———-4个字节—负2147483648到2147483647 0到4294967295
BIGINT——-8个字节—-2的63次方~2的63次方-1;无符号:0~2的64次方-1;
2浮点型:
@MySQL——(2)数据类型与操作数据表——浮点型
1、浮点型
FLOAT[(M,D)]:这里M指总位数,D指小数点后位数。如FLOAT(7,二)则能表示的最大值为:9999九.9九
DOUBLE[(M,D)]
二、一般景色下选取FLOAT充分
1.float[M,D],4个字节
2.double[M,D],8个字节
(M-总位数,D-小数位数)
光阴和日期
1、YEAR:1970至2069
2、TIME:-838:59:59至838:59:59
3、DATE:1000-1-1至9999-12-31
4、DATETIME: 1000-1-1 00:00:00至9999-12-31 23:59:59
5、TIMESTAMP存储范围:壹97零-一-一 00:00:00到2037-1二-31 二叁:5玖:5九
MySQL数据类型(四):字符型
1、CHA汉兰达(M):定长类型,比方CHA安德拉(五),假设我们只赋值abc,那么系统会活动在末端补七个空格0——25五
二、VA福睿斯CHA奥迪Q五(M):变长类型,L+三个字节,在那之中L<=M且0<=M0——65535
三、ENUM(’value一’,’value二’…)枚举值,提供几个选用,选择中间八个,如:性别(’男’,’女’,’保密’)
四、SET(‘value一’,’value2’…)
最多陆11个分子,可以任选在这之中个中多少个,自便排列组合
MEDIUMTEXT -L+3字节, L<2^24
LONGTEXT -L+4字节, L<2^32
ENUM(‘value1’,’value二’…)
-一或三个字节,取决于枚举值的个数(最多655三十多个值)
SET(‘value1’,’value二’…)
-壹、2、叁、四或八个字节,取决于set成员的多少(最多63个分子)
比方char(M)的认证,官方说的是:会占有M × w个字节, 0 <= M <= 25伍,
where w is the number of bytes required for the maximum-length character
in the character
set。w的意趣是某种字符编码中据有的最大空间。所以实际这里M的意味正是实际上的字符个数的意思,
纵然那几个这种编码下各种字符占用二个字节、三个字节,也能积累最大贰伍拾个字符。并不是如ppt中所说的最大M个字节。
还有关于varchar(M)的布道,官方说的是:L + 壹 bytes if column values
require 0 − 25五 bytes, L + 二 bytes if values may require more than 25伍bytes。所以这里不自然是L+1,还可能是L+2。ppt中所说的最长是6553一个字节,不过又是L+一,3个字节显著是不够存款和储蓄那么大的尺寸的,所以ppt还是某个出入的。
还有任何的tinytext,text,mediumtext,longtext,这几个品种最大尺寸就是二^捌-一个字节,2^1陆-1字节,2^二四-3个字节,二^3二-一个字节,若是某种字符编码中,每种字符占用三个字节,那么总的能够积攒的字符数将要巨惠。
@MySQL——(二)数据类型与操作数据表——成立数据表
一、数据表
1、数据表(或表)是数据库最要害的组成都部队分之1,是任何对象的底子
贰、表是1个二维表,行称为【记录】,列称为【字段】
二、创设数据表
1、首先张开数据库(数据库要设有): USE 数据库名称
二、创立数据表:CREATE TABLE [IF NOT EXISTS] table_name(
column_name(列名称) data_type(列类型),
…. )
举例——
CREATE TABLE tb1(
username VARCHAR(20),
userage TINYINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED,
);
UNSIGNED 无符号

1.1 登录:

    mysql -uroot -p

壹.二 登6时的参数:

用法 |介绍
---|---
-D, --database=name |打开指定数据库
--detailmiter=name| 指定分隔符
-h, --host=name |服务器
-p, --password[=name] |密码
-P, --port=# |端口号 (-P 大写的P)
--prompt=name |设置提示符
-u, --user=name |用户名
-V, --version |输出版本信息且退出

查阅数据
翻开数据表:(查看选用的数据库的表)
SHOW TABLES [FROM db_name] [LIKE ‘pattern’ | WHERE
expr];(能够用来查阅别的数据库的表列表)
例:
SHOW TABLES;//查看当前挑选的数据库的全部表
SHOW TABLES FROM
TEST;//查看TEST数据库中的全部表,当前接纳数据库地点不变。
SELECT DATABASE();//查看当前甄选的数据库
SHOW TABLES [FROM db_name]
[LIKE ‘pattern’ | WHERE expr]
既能够查阅当前数据库中的数据表,也可查阅别的数据库中的数据表

1.3 退出:

  • exit;
  • quit;
  • \q;

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| bookstore |
| mysql |
| yggl |
+——————–+
4 rows in set
mysql> use bookstore;
Database changed
mysql> show tables;
+———————+
| Tables_in_bookstore |
+———————+
| book |
+———————+
1 row in set
mysql> show tables from bookstore;
+———————+
| Tables_in_bookstore |
+———————+
| book |
+———————+
1 row in set
.查看数据表列表
一.查看数据表列表
SHOW TABLES [FROM db_name] [LIKE ‘pattern’ | WHERE expr]
SHOW TABLES; //查看当前数据库中的表
SHOW TABLES FROM mysql;
FROM之后,当前数据库不会生出改动
SHOW COLUMNS FROM tb一; 查看tb1中的数据表结构
笔录查找
翻看数据表
SHOW table-name;
插入记录
INSERT [INTO] table-name [(column-name,……)] VALUES(val,….);
\\字符要加”号。
\\table-name前边未有标明插入列的图景下,每1列的值都要按梯次插入才行。
笔录查找
SELECT expr,…FROM table-name;
SELECT * FROM test; \\*号是具体全体字段。
SELECT 查找关键字 expr 字段 *意味着整个
FROM tb1_name哪个数据表
空值与非空
一、数据表(或表)是数据库最要害的组成都部队分之壹,是任何对象的底蕴。
数据表是一个二维表,行称为【记录】,列称为【字段】
贰、创造数据表
壹、首先展开数据库(数据库要留存): USE 数据库名称
2、创制数据表:CREATE TABLE [IF NOT EXISTS] table_name(
column_name(列名称) data_type(列类型),
…. )
举例:
CREATE TABLE tb1(
username VARCHAR(20),
userage TINYINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED,
);
UNSIGNED 无符号
空值与非空:NULL,字段值可以为空 NOT
NULL,字段值禁止为空,不赋值会报错
三、查看数据表列表
1、查看数据表是否留存:SHOW TABLES [FROM db_name] [LIKE ‘pattern’ |
WHERE expr ]
二、查看有个别表中全部列的消息:SHOW COLUMNS FROM tbl_name;
4、记录的插入
壹、插入记录 INSERT [INTO] tbl_name [(col_name,…) ]
VALUES(val1,val2,….)
2、部分字段赋值使用(col_name1,col_name2,…)
3、插入列col_name能够大约,但必须为具有字段输入音信,不然报错
5、记录的探求
一、查找记录:SELECT expr,… FROM tbl_name;
SELECT * FROM tbl_name;

一.肆 修改提醒符:

  • 签到的时候钦赐:
    sh mysql -uroot --prompt \h -p
  • 登入后钦点:

    语法: prompt 提示符

    参数 含义
    \D 完整的日期;
    \d 当前数据库
    \h 服务器名称
    \u 当前用户

活动编号
一.自行编号 AUTO_INCREMENT
机动编号,且务必与主键合营使用
二.机关编号AUTO_INCREMENT作用
壹、自动编号:保证记录的唯一性
二、类型必须为整型(能够是FLOAT(伍,0)等,小数点后必须为0),必须和主键P福特ExplorerIMA昂CoraY
KEY组合使用
3、暗中同意情形下,开头值为一,每便的增量为一
暗许景况下,起先值为壹, 每回增量为一.
CREATE TABLE tb3(
id SMALLINT UNSIGNED AUTO_INCREMENT,
username VA翼虎CHAGL450(30) NOT NULL); //报错,自动增量字段必须设置成主键
主键约束

一.伍 常用命令:

  • 来妥贴前服务器版本:

select version();
  • 展现当今日猪时间:

select now();
  • 浮现当前用户:

select user();

主键可以写为P猎豹CS6IMA翼虎Y KEY,也得以写成KEY
每张数据表只好存在3个主键
主键保障记录的唯壹性
主键自动为NOT
NULL,也正是说必须求为主键赋值。但如若主键选拔了AUTO_INCREMENT,那么不需求手动赋值。
auto_increment必须和主键primary key一起行使,可是主键primary
key不肯定要和auto_increment一块使用
(主键的字段是足以赋值的,但无法赋一样的值)
主键约束
一、唯1性(能够赋值可是不可能给七个记录赋同样的值)每张表只存在二个主键
二、非空,插入情势与NOT NULL同样
三、自动编号(AUTO_INCREMENT)必须与主键(P帕JeroIMACR-VY
KEY)搭配使用,主键能够不与活动编号一同使用
创立多个带主键的表:
CREATE TABLE user(
-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> username VARCHAR(20) NOT NULL
-> );
Database changed
随之一回插入数据 便会有编号出现 可是一旦除去了 编号会油可是生抛锚
唯一约束
唯一约束与主键约束的界别:
UNIQUE KEY 一张数据表能够有七个,而P智跑IMA索罗德Y KEY一张数据表只可以有多少个
唯一约束的字段可感觉空,主键约束的字段不可能为空
(唯1约束若四个字段为空,看起来就如不能够保险唯一性,但存款和储蓄的只有贰个‘空’,所以仍旧力保了字段的唯1性)
UNIQUE KEY
(1)唯1约束
(②)唯壹约束能够确定保障记录的唯壹性
(3)唯一约束的字段可以为空值(NULL)
(4)每张数据表能够存在几个唯壹约束

一.6 语句标准:

  • 主要字和函数名大写
  • 数据库名称、表名称、字段名称小写
  • SQL语句必须以分集团结尾

私下认可约束

二. 操作数据库

  1. 主键约束 primary key 与Auto_Increment 自动编号同盟使用
  2. 唯壹约束 unique key
  3. 私下认可约束 default
    示例:
    CREATE TABLE tb6(
    id SMALLINT UNSIGED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20) NOT NULL UNIQUE KEY,
    sex ENUM(‘一’,’2′,’叁’) DEFAULT ‘三’,)//表示当sex未有赋值时,私下认可值为三
    总结
    数据类型 整型 (tinyint smallint mediumint int bigint)
    浮点型 (FLOAT{[M,D]},DOUBLE{[M,D]})M:总位数,D:小数点后位数
    日期 (YEAR DATE TIME TIMESTEMP)
    字符型 (CHAR VARCHAR TEXT)
    DOS 分界面连接数据库 mysql -u用户名 -p密码 -hHOST
    突显数据库 SHOW DATABASES;
    来得表结构 SHOW COLUMNS FROM table;
    显示全部表 SHOW TABLES;
    跻身数据库 USE 数据库;
    创办数据库 CREATE DATABASE 库名;
    创设表 CREATE TABLE 表名(字段及新闻);
    插入数据 INSERT INTO table []VALUES();[]为空表明插入全体的值
    查询数据 SELECT 字段 FROM table WHERE 条件
    自增自动编号 auto_increment
    主键约束 PCR-VIMAEvoqueY
    KEY(有auto_increment的一定是主键,主键不自然有auto_increment)
    唯一约束UNIQUE KEY
    默许约束 DEFAULT 当未有赋值时则自动添加默许值
    四.非空封锁:NOT NULL
    5.外键约束:
    *CREATE TABLE tb_name(
    …,

    数据表操作:
    )//创立数据表(结构)
    *SHOW COLUMNS FROM tb_name//查看数据表结构(字段)
    *INSERT tb_name[(…)] VALUES(…)//向数据表内插入记录
    *SELECT *FROM tb_name//查看数据表的记录

贰.一 创造数据库

create {database | schema} [if not exists] db_name [default] character set [=] charset_name;

2.2 查看创造数据库的新闻:

show create database db_name;

自律以及修改数据表
外键约束:
FOREIGN KEY (子表字段名) REFERENCES 父表 (父表字段名)
务求:保持数据1致性,完整性;完结1对1或一对多关系。
数据表的贮存引擎只可以为InnoDB:配置文件中default-storage-engine=INNODB;
父表和子表禁止利用临时表(子表:具备外键列的表;父表:子表参照的表)
外键列和参照列必须有所相似的数据类型。数字长度或有无标记必须一律,字符长度可分裂
外键列和参照列必须创设索引。若是参照列不存在索引的话,MySQL将活动创设索引
SHOW INDEXES FROM 表名 查询表格中的索引
开拓1个数据库
USE test
始建多个用户数据表
CREATE TABLE users(
-> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT
-> username VARCHAR(10) NOT NULL
->pid SMALLINT UNSIGNED//pid和表province中id字段类型都要统统壹致
->FOREIGN KEY (pid) REFERENCES provinces (id)
->);
子表是users,父表是province
外键列pid,参照列id,
province的id加过主键,主键在开创的时候会自行创制索引。所以id字段上业已创办过索引,参照列已经有了目录
体现索引SHOW INDEXES FROM province;
外键列上大家一直不为pid钦赐主键,系统活动创设索引
在 MY.ini 文件中编辑暗中同意的贮存引擎:default-storage-engine=INNODB;
来得创造表的讲话:SHOW CREATE TABLE table_name;
查看表是还是不是有目录:SHOW INDEXS FROM table_name;
以网格查看表是还是不是有目录:SHOW INDEXS FROM table_name\G;
Eg:
CREATE TABLE table_name1(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL
)
CREATE TABLE table_name2(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL,
pid SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES table_name1(id) /* 外键 pid 参照
table_name1中的 id 字段 */
)

贰.三 修改数据库

alter {database | schema} [db_name] [default] character set [=] charset_name;

CASCADE:删除或更新父表中的数据对应的删减或更新子表中的相相配的行;
SHOW CREATE TABLE tb_name;//显示数据表制造时的指令;
成立子表:users1;
>CREATE TABLE users(
>id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
>username VARCHAR(10) NOT NULL,
>pid(外键) SMALLINT(与参照键类型同样)
UNSIGNED(与参照键有无符号类型也要依然故小编),//外键的机能映未来那:若是大家要增加八个省份的字段,须求增加个char型的,现在有了关系型数据库,我们只要求仓储省份的id就可以;
>FOREIGN KEY (pid) PREFERENCES provinces (id) ON DELETE CASCADE,
>);
INSERT provinces(pname) VALUES(‘A’);
INSERT provinces(pname) VALUES(‘B’);
INSERT provinces(pname) VALUES(‘C’);
INSERT users1(username,pid) VALUES(‘Tom’,1);
INSERT users1(username,pid) VALUES(‘Jerry’,2);
INSERT users1(username,pid) VALUES(‘Lucy’,3);
当删除provinces中的id=三的数据C时,相应的users1中的露茜也会被删掉,更新的话同样如此;
SET
NULL://从父表删除或更新行,会设置子表中的外键列为NULL,假如利用该选项,必须有限帮衬子表列未有一些名NOT
NULL
RESTPAJEROICT://拒相对父表的删除或更新操作;
NO ACTION://标准的SQL语句,在MYSQL当中与RESTRICT相同
实质上支付中,大家很少使用物理的外键约束,而是接纳逻辑约束;无理的外键约束只有innoDB这种存款和储蓄引擎才会支撑,MYISAM这种斯特林发动机就不援助物理的外键约束。反过来讲,当大家接纳到的引擎为MYISAM时,只可以使用逻辑外键(即几个表的统一希图的逻辑关系)。
外键约束的参照他事他说加以考查操作:
1、CASCADE:从父表删除或更新且活动删除或更新子表中匹配的行。
二、SET
NULL:从父表删除或更新行,并安装子表中的外键列为NULL。要是运用该选项,必须保险子列表未有一点名NOT
NULL。
叁、RESTTiguanICT:拒相对父表的删减或更新操作。
4、NO ACTION:规范SQL的第一字,在MySQL中与RESTGL450ICT一样。
FOREIGN KEY (子表列名) REFERENCES FROM 父表名(父表列名)[ON
DELETE|UPDATE CASCADE|SET NULL|RESTRICT|NO ACTION];
在事实上支付中,存款和储蓄引擎不为INNODB,不能够使用FOREIGN
KEY,遍布使用逻辑形式。
.表级约束与列级约束
壹.表级约束与列级约束
(一)对两个数据列创立的束缚,称为列级约束
(二)对多少个数据列创设的封锁,称为表级约束
(3)列级约束既能够在列定义时表明,也足以在列定以后评释
(4)表级约束只幸而列定义后宣称
二.主键、外键、非空、唯1、default都以封锁标准。主键、外键、唯1既能够当作表级约束,也可看做列级约束
( not null, default )唯有列级约束
加上封锁
一.增添主键约束
CONSTRAINT_PK主键名称为PK
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (index_col_name,…)
e.g:ALTER TABLE users ADD CONSTRAINT PK_users_id PRIMARY KEY (id);
二.加多唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
[index_name] [index_type] (index_col_name,…)
e.g:ALTER TABLE users ADD UNIQUE (username);
叁.增多外键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name](index_col_name,…) reference_definition
e.g:ALTER TABLE users ADD FOREIGN KEY (pid) REFERENCES provinces (id)
肆.增多/删除暗中认可约束 DEFAULT
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal |
DROP DEFAULT}
e.g:
ALTER TABLE users ADD age TINYINT UNSIGNED NULL;
ALTER TABLE users ALTER age SET DEFAULT 15;
ALTER TABLE users ALTER age DROP DEFAULT;
去除约束
1约束的 index_name 可通过 SHOW INDEX FROM table_name\G; 查询
删除主键约束:
ALTER TABLE table_name DROP PRIMARY KEY;
剔除唯一约束:
ALTER TABLE table_name DROP INDEX index_name;
除去外键约束:
ALTER TABLE table_name DROP FOREIGN KEY
(fk_symbol)通过查询系统默许给的名字;
外键约束的名字 fk_symbol 可通过 SHOW CREATE TABLE table_name; 查询
删除此之外键约束,查找CREATE TABLENAME 找到系统为外键约束增多的名字
添加/删除列
一、增加单列:假诺钦点FI汉兰达ST,则在总体表的最前方,暗许不写为全数表的尾声方;假若钦定AFTEBMWX3col_name,则在col_name的后面。
ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition
[FIRST AFTER col_name]
二、添增添列:不可能钦赐FI昂CoraST/AFTERubicon、只好默感到最后方。
ALTER TABLE tbl_name ADD [COLUMN] (col_name
column_definition,…)
三、删除单列
ALTER TABLE tbl_name DROP [COLUMN] col_name
四、删除多列(Ps:删除壹列的同时,新扩大1列。其间用逗号隔开)
ALTER TABLE tbl_name DROP [COLUMN] col_name, DROP [COLUMN]
col_name,DROP [COLUMN] col_name

2.4 删除数据库

drop {database | schema} [if exists] db_name;

图片 1

三. 数据类型

操作数据表中的笔录
INSERT 插入记录
一、INSERT 插入记录
语法1:INSERT [INTO] 表名 [(列名1,列名2,…)]
VALUES(列值1,列值2,…),(…),…;
对此自动编号的字段,插入“NULL”或“DEFAULT”系统将机关依次递增编号;
对此有暗中认可约束的字段,能够插入“DEFAULT”表示使用默许值;
列值可传唱数值、表明式或函数,如密码能够用md伍()函数进行加密(如md伍(‘1贰三’));
可同时插入多条记下,多条记录括号间用逗号“,”隔开分离
语法2:INSERT [INTO] 表名 SET 列名1=列值1, 列名2=列值2,…;
这种措施二次只可以插入一条记下;列值中有活动编号、默许值或Boolean类型均能够不赋值(使用子查询)
语法3:INSERT [INTO] 表名(列名1,…) SELECT 列名1,… FROM 表名
[GROUP BY/HAVING/ORDER BY/LIMIT…];
相似用于将别的表的多寡插入到钦点表,注意相应
贰、单表更新 UPDATE
UPDATE 表名 SET 列名1=列值1 [,列名2=列值2, …] [WHERE
条件];(如条件为 列名=列值 修改某一字段的值)
轻易条件则更新具备记录该列的值
3、单表删除 DELETE
DELETE FROM 表名 [WHERE 条件];
大概条件则私下认可删除该表全数记录(仅删除全数记录,不删除数据表);
布置自动编号的字段时,号数为已部分最中号数+1,即便中间有空号数也是那般(如1235六,插入记录后为123567)
INSERT// 插入记录
第一种:
insert tb_name
[column_name]values(…)[,(…),(….)];–比较常用,能够二次性插入多条记下,并且能够输入表明式以致是函数,然而不大概打开子查询。
第二种:
insert tb_name set
column_name={exprdefault};–能够展开子查询,可是只好插入一条记下的多少个字段,但1回只好插入一条记下(INSERT
[INTO] 表名 SET 列名1=列值1, 列名2=列值2,…;)。
第三种:
insert table_name [(colname…)]
select语句…..–这种艺术就是把询问到的多少个表结果插入到另多个内定数量表中。
单表更新
单表更新:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET
col_name1={exp1|DEFAULT}[,col_name2=…][WHERE where_condition]
【一般的话要用WHERE钦命地方,不然全数数据都会被更新】
例:
不点名地点:UPDATE users set age = age + 5,sex = 0;
使表里全体记录的age加伍
点名地点: UPDATE users set age = age+ + 十 WHERE id % 二=0;
取id为偶数的任务
update更新数据
update <表名>
set <列名>=<表达式>,[,<列名>=<表达式>]…
[where <条件>];
剔除记录
1、删除记录DELETE:分为单表删除和多表删除
二、单表删除:DELETE FROM tbl_name [WHERE where_conditon];
三、若不加多WHERE则删除【全部记下】
剔除后再插入,插入的id号从最大的往上加,而不是补充删除的。
delete from users where id=6;
insert users values (null,’11一’,’22二’,3三,null);
删除后再插入,插入的id号从最大的往上加,而不是互补删除的。
询问表明式
每三个表明式表示想要的壹列,必须至少有贰个
多个列之间以英文逗号分隔
星号(*)表示为此列 tbl_name.*能够象征命名表的兼具列
查询表达式能够应用[As]alias_name为其予以小名
小名可用来GROUP BY,OTiguanDRE BY或HAVING子句
SELECT 字段出现顺序影响结果集出现顺序,字段小名也潜移默化结果集字段小名。
一、查找记录
1、语法:
SELECT select_expr [,select expr2…] 只查找某二个函数或表明式
[
FROM table_references 查询表名
[WHERE where_conditon] 查询条件
[GROUP BY {col_name|position} [ASC|DESC],…]
按某些字段进行分组,同样的只体现第二个
[HAVING where_conditon] 分组时,给出显示标准
[ORDER BY {col_name|expr|position} [ASC|DESC],…] 排序
[LIMIT {[offset,]row_count|row_count OFFSET offset}]
限制再次回到数量
}
二、查询表达式的次第会潜移默化结果顺序
各种表达式表示想要的1列,必须有最少2个
多个列直接以英文逗号分隔
星号*意味着全部列
3、使用tbl_name.col_name来代表列记录,那多表查询时方可区分开同名的列
4、使用[AS] alias_name为其给予外号,小名能够用来GROUP BY、OENCOREDER
BY或HAVING子句,比方SELECT id AS userId,username AS uname FROM users;
那样查询出来的结果会用别称表示

3.1 整型

  • tinyint 有号子位:-12八~1二柒, 无符号位:0~255 (2^8-1) 1字节
  • smallint 2^16-1 2字节
  • mediumint 2^24-13字节
  • int 2^32-1 4字节
  • bigint 2^64-1 8字节

无符号位是有标识位的二倍

where 条件表达式
where 后各个依照规则(>、<、=、>=、<=、!=、<>、IS NOT
NULL),依照逻辑(and,or),依据结合艺术left join、right
join等,依照情势相称(IN、NOT IN、like、not
like、regexp),使用种种MySQL函数和表明式,从表会集中筛选记录。
标准化表明式
对记录进行过滤, 假设未有一点点名WHERE子句,则展现全部记录。
在WHERE表明式中,可以运用MySQL帮忙的函数或运算符。
询问结果分组 GROUP BY
[GROUP BY {col_name|position} [ASC|DESC],…]
ASC:升序,默认
DESC:降序
position:SELECT语句中列的序号
eg. ELECT sex FROM users GROUP BY sex;对users中的sex按sex实行分组
eg. SELECT * FROM users GROUP BY
1;(这里的一表示查询的第二个字段,这里询问全体字段音信,第一个字段就是id,所以会遵循id字段进行分组)
一表示SELECT语句中率先个冒出的字段,即地点。
建议BY后写列名称,不写地点,因为义务还要人为数。
在意:如若存在同样的值(举例地点的age恐怕有两个壹律的值),只会保留1个。但使用OKoleosDER
BY 就不会轻便。
having 语句分组
having 语句分组,用在group
by前面扩充条件,推断式中的字段是必须出未来前面select中的
可能是能够涵盖未有出现在前边查询中的字段的多个聚合函数count(),max()等等
[HAVING when where_condition]
SELECT sex FROM users GROUP BY 1 HAVING age > 35; //有错
SELECT sex, age FROM users GROUP BY 1 HAVING age > 35;
SELECT sex FROM users GROUP BY 1 HAVING count(id) >= 2;
(那条指令,指遵照sex分组,分成了两组sex=0和sex=NULL,条件id数大于二的留下突显,明显sex=0个数有8>二故留下,而sex=NULL个数为1,不满意条件,故不呈现。借使条件改成count(id)>=壹,则会呈现sex为0和NULL四个分组。)
聚合函数永久唯有2个回去结果
count是记录个数的,
** HAVING 分组条件 **
未有 HAVING 时,GROUP BY 是对全部记录举行分组并显示结果。
有 HAVING 时,对总体记录分组后只把适合HAVING条件的笔录呈现出来。
举例:SELECT username,age FROM users GROUP BY age HAVING
count(id)>=2;
那句话的意味是:根据age分组后,把组员数量超越等于二的组突显出来。
order by对查询结果进行排序
order by
对查询结果举行排序,暗中认可是升序
order by{col_name}
select * from users order by id desc; //对1个字段排序
select * from users order by age,id desc; //五个字段同时排序
desc是降序
一、对查询结果开展排序:[ORDER BY [col_name | expr | position }
[ASC|DESC],…]elect * from user order by id desc;
二、能够而且按多条字段进行排序,规则是先按前边的字段排,在基础上再按前边字段排。
3、如:SELECT * FROM users O库罗德DELAND BY age,id DESC;
先遵照age排序,要是age有重复的,重复的字段里按id排序
LIMIT:限制查询结果回到的数据
[LIMIT {[offset,] row_count|row_count OFFSET offset}]
SELECT语句从0开始编号
offset:偏移量
row_count:重临结果的数目 [LIMIT{[offset,]row_countrow_count
OFFSET offset}]
eg. SELECT * FROM users LIMIT 二; //
从第三条伊始(第2个为0),再次来到两条
SELECT * FROM users LIMIT 2,3 ;//从第贰条起首(第多少个为0),重回3条
其二种insert,数据从2个表插入到另多个表
将查询结果写入到另1个数据表中:
INSERT table_name(column_name) SELECT …
eg:
INSERT test SELECT username FROM users WHERE age >=30; //
字段不合营提醒
INSERT test(username) SELECT username FROM users WHERE age >=30;
{
对待分组:
SELECT sex, age FROM users GROUP BY 1 HAVING age > 35;
分组用的是HAVING须求HAVING后的口径照旧是聚合函数,要么字段在前方出现;
而插入用的是WHERE 没有上述提到的三个限制
}
总结
笔录操作:增,改,删,查
INSERT://扩展记录,有两种方法。
INSERT [INTO] tbl_name [(col_name,…)] {VALUES | VALUE}
({expr|DEFAULT},…),(…),…
INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},…
INSERT [INTO] tbl_name [(col_name,…)] SELECT…
UPDATE://更新数据
单表更新
UPDATE [LOW_PRIORITY][IGNORE] table_reference SET
col_name1={expr1|DEFAULT},[col_name2={expr2|DEFAULT}]…[WHERE
where_condition]
多表更新
DELETE : //删除数据
单表删除
DELETE FROM tbl_name [WHERE where_condition}
多表删除
SELECT: //查询
SELECT select_expr [,select expr2…] 只查找某二个函数或表明式
[
FROM table_references 查询表名
[WHERE where_conditon] 查询条件
[GROUP BY {col_name|position} [ASC|DESC],…]
按有些字段举办分组,同样的只展现第三个
[HAVING where_conditon] 分组时,给出展现规范
[ORDER BY {col_name|expr|position} [ASC|DESC],…] 排序
[LIMIT {[offset,]row_count|row_count OFFSET offset}]
限制重临数量
]

3.2 浮点型

  • float[M, D] 单精度 (M是数字总位数,D是小数点后边的位数)
  • double[M,D] 双精度

叁.三 日期时间型

  • year (存款和储蓄必要:) 一字节
  • time 3字节
  • date 3字节
  • datetime 8字节
  • timestamp 4字节

3.4 字符型

  • char(M) M个字节 0<M<=255 (定长,不足的位数用0补齐)
  • varchar(M) L+三个字节,当中 L<M && 0<M<=6553五(变长,字符多少长度存多少长度)
  • tinytext L +1 个字节,其中L<2E8
  • text L+2字节,其中L<2E16
  • mediumtext
  • longtext
  • enum(‘value壹’, ‘value二’, …)
    一或三个字节,取决于枚举值的个数(最多655三11个值)
    枚举类型,从多少个选择里面选用,如性别:男,女,保密
  • set(‘value一’, ‘value2’, …) 集合类型,从选择中甄选随机(多)个选项

四. 数据表操作

肆.壹 选取数据库

开采数据库后,使用use命令接纳数据表:

use db_name;

四.2 查看展开的数据库

select database();

4.叁 成立数据表

语法:

create table [if not exists] table_name (
    column_name data_type,
    ...
)

eg:

create table tb1(
    id int unsigned primary key auto_inscrement,
    username varchar(20),
    salary float(8,2)
);

肆.四 查看数据表

语法:

show tables [from db_name] [like 'pattern' | where expr];

肆.5 查看数据表结构(列)

语法:

show columns from tbl_name;

大概选取describe tbl_name语句:

describe tbl_name;