mysql常用語句梳理

mysql常用語句梳理

重新複習mysql,記錄了一些語句,整理如下。


mysql版本爲5.7.23


安裝

CentOS系統
yum install mysql mysql-server mysql-devel

Ubuntu系統
apt install mysql-server mysql-client

sql語句

注:下面舉例的被標黑的字段是參數字段。

1>顯示所有數據庫
show databases;

2>應用數據庫
use [database_name];

3> 顯示所有數據表
show tables;

4>顯示數據表的簡略信息
desc [table_name];
顯示數據表中的結構,在使用起來貌似與下面這個語句相同,沒看出來什麼區別。。
show columns from [table_name];

5> show index from [table_name];
顯示數據表的索引

6>查找數據表中column字段的值
select [column1,column2] from [table_name];

7>創建用戶,並設置密碼
create user ‘[user_name]’@’[user_local]’ identified by ‘[password]’;
比如,我想爲本地主機(localhost)創建一個test用戶,且該用戶的密碼是12345。

create user ‘test’@‘localhost’ identified by ‘12345’;

你也可以將localhost改爲特定的ip地址

8>爲用戶授權
grant [privileges] on [database.table] to ‘[username]’@’[host]’;

其中privileges包括,select,delect,update等。

每次修改過授權之後,需要刷新權限使用如下命令

flush privileges;

9>將所有數據庫的所有表的所有權限都賦予給用戶
grant all on * . * to ‘[username]’@’[host]’;

10>撤銷某用戶的某權限
revoke [previleges] on [database.table] from ‘[username]’@’[host]’;

11>show grants for ‘[username]’@’[host]’;
顯示對用戶做過的grants的操作

12>drop user ‘[username]’@’[host]’;
刪除某用戶

13>更改用戶密碼
set password for ‘[username]’@’[host]’=password(’[passowrd]’);
如果是更改當前用戶密碼則爲
set password =password(’[passowrd]’);

14>設置mysql的字符集的編碼格式
set names [char_type];
以utf8爲例
set names utf8;

15>一些重要的sql命令
select -從數據庫中提取數據
update -更新數據庫中數據
delete -從數據庫中刪除數據
insert into -向數據庫中插入新數據
create database -創建新數據庫
alter database -修改數據庫
create table -創建新表
alter table -變更數據庫表
drop table -刪除表
create index -創建索引
drop index -刪除索引

16>創建數據庫
create database [database_name];

建議在創建數據庫的時候,直接設置數據庫使用的默認編碼爲utf-8
create database [database_name] character set utf8;

17>創建數據表
create table [table_name] (id int,name varchar(255),sex varchar(16),age int,tel int,address varchar(255));

18>向表中插入數據

insert into [table_name] values (5,‘tom’,‘男’,15,110,‘washington’);

values後的小括號中的值的順序與表結構中每個字段的順序是一致的,每個字段之間使用逗號分隔。

另外,也只可以不按照數據表中的默認順序去插入數值,也可以自己設置順序,如下:
insert into [table_name] (name,sex,tel,address,id,age) values (‘mary’,‘女’,120,‘shanghai’,‘2’,13);

19>查詢數據字段
select [column1],[column2] from [table_name];
前面說過,這是從某表中查詢某兩個字段的值。

如果想要查詢特定值的某些字段,比如想要查詢性別爲男的人的name和id值,可用如下方式:
select name,id from student where sex=‘男’;

其中 where的條件匹配還可以使用如下的方式:
=                 -等於
>                  -大於
<                  -小於
<>                 -不等於
>=                 -大於等於
<=                 -小於等於
between and            -限定值在某兩個值之間

用法
select * from [table_name] where [column_name] between 13 and 14;
還可以是not between,意思和使用方法不言而喻

like -查詢與查詢語句類似的值
用法
select * from [table_name] where [column_name] like ‘%ang%’;
這裏使用%爲通配符,而不是常用的*.

in -查詢在某個範圍之間的值
用法
select * from [table_name] where [column_name] in (13,14);

and/or -可以把多個限定條件一起使用

20>對數據進行排序,可以多個字段一起排序
select * from [table_name] order by [column_name];
這種排序方式默認是按照正序去排(asc),如果是逆序,可以加入desc,使用如下方式
select * from [table_name] order by [column_name] desc;

21>對錶中數據進行更新
update student set age=22,tel=333 where name=‘jerry’;
以上的意思是將student表中名字叫做Jerry的年齡和電話分別做修改。

22>刪除表中某一行數據
delete from [table_name] where [column_name]=1;

如果直接想清空表數據

23>查詢時,對查詢結果的數量進行限制

select * from [table_name] where [column_name]=‘男’ limit 1;
這條語句前面的限定條件不論匹配了多少條,最終只會顯示第一條。

24>正則表達式
下面語句的意思是查詢以s或者c開頭的字段
select * from [table_name] where [column_name] regexp ‘[s,c].’;
再對括號內的字段進行取反的意思就是開頭不包含s或者c的字段
select * from [table_name] where [column_name] regexp '[s,c].
’;

下面語句的意思是查詢字段中只要包含s或者c就可以
select * from [table_name] where [column_name] regexp ‘[s,c].*’;

25>別名(alias)
select [column_name] as ‘性別’ from [table_name] ;
將sex這列的名稱改成‘性別’並顯示,但是需要注意的是,這只是在本次顯示和篩選有效,實際並沒有修改column的名字

select * from student as 學生;
這句話的意思是將表的名字設置一個別名,並顯示,同樣,並沒有實際修改表的名字。

26>表關聯,
分爲內聯,全聯,左聯,右聯。

將student表的id和score表的sid,內聯起來一一對應顯示。
select * from student inner join score on id=sid;
mysql> select * from student inner join score on id=sid;
±-----±-----±-----±-----±-----±-----------±-----±--------±-----±--------+
| id | name | sex | age | tel | address | sid | chinese | math | english |
±-----±-----±-----±-----±-----±-----------±-----±--------±-----±--------+
| 2 | mary | 女 | 13 | 120 | shanghai | 2 | 88 | 78 | 99 |
| 3 | lili | 女 | 18 | 199 | beijing | 3 | 78 | 88 | 79 |
| 4 | Lucy | 女 | 28 | 199 | beijing | 4 | 79 | 98 | 99 |
| 5 | tom | 男 | 15 | 110 | washington | 5 | 74 | 95 | 49 |
| 6 | jam | 男 | 38 | 999 | suzhou | 6 | 75 | 96 | 89 |
±-----±-----±-----±-----±-----±-----------±-----±--------±-----±--------+
5 rows in set (0.01 sec)

左聯表又稱爲左外聯表,以左表爲基礎,即使右表沒有查詢到任何數據,也會顯示,如下示例。
我們發現對於score表的sid值而言,並沒有8,所以查詢的結果都是null,但是依然顯示。

mysql> select * from student left join score on sid=8;
±-----±-----±-----±-----±-----±-----------±-----±--------±-----±--------+
| id | name | sex | age | tel | address | sid | chinese | math | english |
±-----±-----±-----±-----±-----±-----------±-----±--------±-----±--------+
| 5 | tom | 男 | 15 | 110 | washington | NULL | NULL | NULL | NULL |
| 2 | mary | 女 | 13 | 120 | shanghai | NULL | NULL | NULL | NULL |
| 3 | lili | 女 | 18 | 199 | beijing | NULL | NULL | NULL | NULL |
| 4 | Lucy | 女 | 28 | 199 | beijing | NULL | NULL | NULL | NULL |
| 6 | jam | 男 | 38 | 999 | suzhou | NULL | NULL | NULL | NULL |
±-----±-----±-----±-----±-----±-----------±-----±--------±-----±--------+

右聯,與左聯概念一致,優先保證右表顯示。使用方法如下。
select * from student right join score on id=sid;

全聯,即把左聯結果表 + 右聯結果表組合在一起,然後過濾掉重複的,這個感覺不怎麼用的到。
select * from student join score on id=sid;

27>創建表時候,同時加入約束
約束如下:
NOT NULL                 -非空
UNIQUE                  -唯一
PRIMARY KEY               -主鍵
FOREIGN KEY               -外鍵
CHECK                  -檢查
DEFAULT                 -默認

每個表可以有多個UNIQUE但是只能有一個PRIMARY KEY,且主鍵不能爲空

示例如下,除了not null可以直接寫在字段類型之後,其他的都是在創建表的最後特殊表明,如下示例中用到了not null和unique。

create table [table_name] (P_id int not null,Last_name varchar(255) not null,Firstname varchar(255),Adddress varchar(255),City varchar(255),unique(P_id));

我們關係型數據庫中如果想要將兩個表之間建立關係,那麼需要在創立的時候制定本表的FOREIGN KEY,並制定到外表的PRIMARY KEY主鍵,也就是說被指向的表必須得有主鍵。不過新表的FOREIGN KEY與原表的PRIMARY KEY之間制定的字段不一定要是一樣,示例如下:
create table orders (o_id int not null,order_num int,P_id int,PRIMARY KEY(o_id),FOREIGN KEY(order_num) references persons(P_id));

default用法,當創建一個表的某個字段,如果在插入數據時,不給該字段賦值,則該字段值爲默認值,示例如下,當不給city賦值時,city的值爲‘beijing’。

create table orders (o_id int,order_num int not null,P_id varchar(255),city varchar(255) default ‘beijing’);

28>創建和刪除索引
create index [index_name] ON [table_name] ([column]);
drop index [index_name] ON [table_name]

29>sql中的刪除操作

drop table [table_name] -刪除表
drop database [database_name] -刪除數據庫
truncate table [table_name] -清空表中數據,但不刪除表

30>alter 操作

向數據表中增加一列
alter table [table_name] add [column_name] int;

刪除數據表中的某列
alter table [table_name] drop column [column_name];

修改數據表中column的數據類型
alter table [table_name] modify [column_name] [date_type];

31>創建自增字段
create table [table_name] (id int auto_increment not null,sex varchar(333),name varchar(200) not null,PRIMARY KEY (id));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章