MySQL基本语句(燕十八部分)

MySQL基本语句

----查看所有库:

show databases;

----选库语句:

use 表名;

----选库之后,查看库下所有表:

show tables;

----创建数据库:

create database 数据库名 [字符集];#字符集可写可不写

eg: create database student charset utf8;

----删除数据库://database表明删除的是数据库 MySQL从删库到跑路

drop database 数据库名;

把数据库中的表和列改名,database不可以改名:

phpMyAdmin是建新库,把所有表复制到新库,再删除旧库;

----设置为非空且唯一

alter table XXX add constrain XX Jname not null unique

----改表名:

rename table 旧表名 to 新表名;

----创建简单表://engine myisam charset utf8 可以不要

create table 表名(列名 列类型,列名 列类型,......)engine myisam charset utf8;

1064是语法错误

----删除表:

drop table 表名;

----查看表的属性:

show full columns from 表名;

desc 表名;

----重新输入:

\c

----清空表数据:

truncate 表名;

相当于删表在重建一张同样结构的表,操作后得到一张全新表

delete是从删除层面操作的

----把敲得SQL及结果都输出到一个SQL文件里

tee 磁盘位置和磁盘名

eg: tee E:\101.sql

----设置主键:

eg: id int primary key auto_increment,

----设置不为空://not null default 非空的默认

eg: sname varchar(20) not null default ' ',

----增加数据://往那张表? 添加几列? 添加的数据?

insert into 表名 (列名,列名…) values (对应列的值,对应列的值…);

insert into 表名 values (对应列的值,对应列的值…);//依次按列输入信息

----修改数据://改哪张表? 改那几列? 改成什么值? 在哪一行生效?

update 表名 set 列=想修改的值,… where 列名=想修改的

//where后面是一个表达式,表达是为真则运行update

#where 1 则全表都要修改,因为where 1恒为真

----删除数据://删除一整行,不存在删除某列

删那张表的数据? 删哪几行? where

eg: delete from 表名 where 条件语句;

delete from 表名 ;//删除表内所有内容

----查询:

//查哪张表? 查那一行? 查哪几列

select * from 表名 ; //查询所有行所有列

*代表所有列 ,表名后面没有where ,则选择所有

select 列名1,列名2… from class ;//查询列1和列2中的全部数据

select * from where 条件语句 //查询所有列

–tinyint :

int 不加特殊说明,默认是由符号,存储范围是-128

加unsigned 表示无符号 存储范围0-255

eg:alter table 表名 add score tinyint unsigned not null defalut 0;

–zerofill:

用0填充,M表示补0宽度,zerofill 与 unsigned绑定

----列类型:

–数值型:
–整形:
–小数型:float double 浮点数在计算机里表述是比较复杂的 IEEE

​ 都存储在decimal(M,D)中,M:精度,总位数,D:标度,小数位

​ 小数的范围:左边能存多少? 右边能存多少?

​ float 能存1038,610-38 float 有损精度

–decimal:变长类型,小数和整数分开存放 和float的精度相比精度更好 复杂

–字符串型:char(M) varchar(M) M限制的是字符(汉字或者英文字母)而不是字节

​ char 定长,若果字符不够\0\0\0…补够,取出时再把右侧的\0删掉 ,varchar 变长 前面有一个 售票员 所以varchar的利用率不能达到100%

–text :文本类型,可以存的较大,搜索时间较慢

​ eg:create table test (article text);

–blob ,二进制类型,用来存贮图像音频等二进制信息

​ 在于防止因为字符集的问题导致信息丢失

–日期时间类型:

----修改字段名称:

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;

----修改字段类型:

ALTER TABLE 表名 MODIFY COLUMN 字段名 新数据类型 新类型长度 新默认值 新注释; 其中column可省略

----删除字段

alter table desktop drop column software_category_id

SQL约束:

----主键约束:关键字primary key //eg:id int primary key // primary key(id,name)

​ 它能够唯一确定一张表中的一条记录,也就是我们通过非某个字段添加约束,就可以使得该字段 不重复不为空

// primary key(id,name) 联合主键,只要联合主键的值加起来不重复就可以

​ --添加修改,约束

​ alter table 表名 add primary key(id);

​ --删除

alter table 表名 drop primary key;

​ --使用modify修改字段去添加

alter table 表名 modify 列名 列类型 primary key;

----自增约束

//列名 列类型 primary key auto_increment

----唯一约束

​ --约束修饰字段的值不可以重复,可以为空

​ alter table 表名 add unique (列名)

create table use1(

id int,

name varchar(20),

unique(id,name)//类似于联合主键,两个键在一起不重复就ok

); //可以

alter table 表名 add unique (列名

create table use2(

id int,

name varchar(20)unique

); //可以

​ 删除唯一约束

alter table 表名 drop index 列名;

​ 通过modify添加

eg:alter table user modify name varchar(20) unique;

​ alter table 表明 modify 列名 列类型 unique;

​ 总结:

​ 1、建表的时候添加约束

​ 2、可以使用alter…add…

​ 3、alter…modify…

​ 4、删除alter…drop……

----非空约束

​ --修饰的字段不能为空 NULL

​ not null

----默认约束

​ 当我们插入字段值的时候,如果没有传值,就会使用默认值

​ default \\age int dafult 10;

----外键约束:最复杂,一个是父表(主表),一个子表(副表)

​ 1、主表中没有的数据,在副表中是不能使用的

​ 2、主表中的记录被副标引用之后,主表改数据中是不可以删除的

​ 索引 desc 降序索引 asc升序索引

创建索引

alter table 表名 add index 索引名(列名 desc)

create index 索引名 on 表名(列名 desc)

删除索引

drop index 索引名 on 表名

alter :修改的意思 alter table 表名:修改那一张表中的类型

使用ALTER 命令添加和删除索引

有四种方式来添加数据表的索引:

​ ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):

​ 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外, NULL可能会出现多次)。

ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。

ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。

显示索引

​ show index from 表名

修改表的语法

​ alter table 表名 add 列名 列类型 列参数【加的列在表的最后】

​ alter table 表名 add 列名 列类型 列参数【把新列加在某列后】【after 某列】

​ alter table 表名 add 列名 列类型 列参数 某列 after 某列

​ alter table 表名 add 列名 列类型 列参数 某列 first 【加在最前面,第一列】

删除列:

alter table 表名 drop 列名

修改列类型:

alter table 表名 modify 列名 新的列类型 新的列参数;【 modify 不能改列名】

修改列名及列类型:

alter table 表名 change 列名 新列名 新类型 新参数;

如果累类型改变了,导致数据存不下怎么办?

1、造成数据丢失 2、根本修改不了,报错

深入的查询知识:select与where

select : where条件查询

​ group by 分组

​ having 筛选

​ order by 排序

​ limit 限制结果条数

(网站上的显示都是增删改查,增删改查重中之重)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6E6opq9J-1600266248833)(C:\Users\10719\AppData\Roaming\Typora\typora-user-images\image-20191216104331390.png)]

查看建表语句:

show create table 表名

// 把已知的表中的数据批量导入另一个表中

//insert into 已知的表名

//select 已知的表含有的的列名 from 另一个表明;

运算符

​ =等于

​ <> !=不等于

​ ‘> 大于 < 小于 <= 小于等于 >= 大于等于

​ between and 在两值之间

​ in 在集合中

​ 模糊查询:

​ where 列名 like ’关键字%‘

​ 用’_'可以匹配任意单个字符,如果想查询刘但是后面两个字符记不清了

​ where 列名 like ’刘__‘ //两个下划线

重要:理解查询的模型

1、把列看成变量,把where后面的看成一个表达式,表达是为真则取出

2、把列看成变量,既然是变量,那么变量之间就可以运算 ’广义投影‘,

​ 还可以起一个列别名 如:(market_price-shop_price) as discount //discount就是列别名、

image-20191213161507414

group与统计函数,单独使用意义不大,要和分组配合起来使用

​ max 求最大 eg:select max(列名) from 表名

​ min 求最小

​ sum 求总和

​ avg 求平均

​ count 求总行数 eg:select count(1) from 表名· //1可以换撑*或者其他的

​ 用*查询的是绝对的行数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DSVpVb5W-1600266248835)(C:\Users\10719\AppData\Roaming\Typora\typora-user-images\image-20191213165039204.png)]

count()函数返回匹配指定条件的行数

​ count(列名)返回指定列的值的数目,NULL不计入其中

​ count(*)函数返回表中的记录数

​ count(distinct 列名)函数返回指定列的不同值的数目

count (表达式)--分组里非空记录数
count (表达式)--分组里非空记录数
count(*)--所有记录
count(1)--所有记录

group 分组查询:

select cat_id,sum(goodes_number)from goods group by cat_id;

​ group by 语句根据一个或者多个列结果进行分组

​ 在分组的列上我们可以使用count,sum,avg等函数

order by :排序查询:

​ 如果我们需要对读取的数据进行排序,order by 子句来设定你想按哪个字段哪种方式进行排序

​ 再返回搜索结果

​ order by 结果集 desc/asc

​ eg:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
  • 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
  • 你可以设定多个字段来排序。
  • 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
  • 你可以添加 WHERE…LIKE 子句来设置条件。

having:

连接查询:

​ 如果两张表有相同的字段如表名1 和表名2 有相同的列 L则

​ select 表名1.列,列2,列3(列3 是表2 的数据). . . from 表名1,表名2 where 表名1.列L = 表 名2.列L

​ select *from 表名1 right join 表名2 on 表名1.列L = 表名2.列L;

eg:select *from student right join sc on student.sno = sc.sno;

ESC][默认 ASC]]


- 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
- 你可以设定多个字段来排序。
- 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
- 你可以添加 WHERE...LIKE 子句来设置条件。

### having:







连接查询:

​	如果两张表有相同的字段如表名1 和表名2 有相同的列 L则

​	select	表名1.列,列2,列3(列3 是表2 的数据). . .	from	表名1,表名2	where	表名1.列L = 表	名2.列L

​	select *from 表名1 right join 表名2 on 表名1.列L = 表名2.列L;

​	`eg:select *from student right join sc on student.sno = sc.sno;`

















猜你喜欢

转载自blog.csdn.net/lmhnba/article/details/108631986