Mysql基本語句

來源:互聯網
上載者:User

標籤:music   play   HERE   集合類   hang   db2   -128   ext   字元   

  查看當前所在庫:select database();
切換目錄: use db1;

查看:
1.查看庫:show databases;
2.查看錶:show tables; 查看當前庫下面所有的表(檔案)
show create table t12; 指定查看某個表的描述資訊
desc t13; 查看錶的具體資訊
3.查看記錄:select name,id from t13; 查看單個記錄的資訊
select * from t13; 查看所有記錄資訊

增加:
1.增加庫:create database db2; create database db2 charset utf8; (增加庫:1.庫名 2.指定字元編號,子檔案會繼承)
2.增加表(即增加表頭資訊):create table t1(id int,name char);
alter table t1 add age int; 可以新增一個欄位列,如:新增age一欄
3.增加記錄:insert into t1(id,name) values(1,‘zhangsan‘),(2,‘lisi‘);
<#insert into t1(name) values(‘wangwu‘),(‘aaaa‘),(‘bbbb‘); 也可以單獨增加某一個欄位 >

更改:
1.更改庫(更改字元編碼):alter table db2 charset gbk;
2.更改表:
2.1alter table t1 modify name char(15); 單獨更改字元類型指定的長度即儲存的寬度
2.2alter table t1 change name Name char(20); 更改欄位的名字
2.3alter table t1 add age int; 可以新增一個欄位列 例如:新增age一欄
3.更改記錄: update t1 set Name="lisi_new" where id=2;
< update db1.t1 set Name="lisi_new" where id=1;可以指定檔案針對修改>

刪除:
1.刪除庫:drop database db1;
2.刪除表:drop table t1;(這是把表格檔案刪掉)
3.刪除記錄: delete from t1 where id=3; 刪除某個欄位,指定合格
delete from t1(這是清空表裡面的內容)
truncate t17; (清空表格裡面的內容,而且還會清空id的累積計數)




重點:
對一個新表開始可以統一對錶格字元段進行限制:
1.限定ID不可為空且唯一存在: create table t17(id int primary key auto_increment);
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
+-------+---------+------+-----+---------+----------------+
1 row in set


delete與truncate的區別:

delete from t1刪除表格裡面的內容後,資料是清理掉了但是AUTO_INCREMENT=5自動計數是會保留的,
-----------------------------------------+
| t17 | CREATE TABLE `t17` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(15) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------+
清理後再去新增name,會發下ID會從原來5開始累積的,不會從0開始:
insert into t17(name) values(‘aaa‘),(‘bbb‘),(‘ccc‘);
+----+------+
| id | name |
+----+------+
| 5 | aaa |
| 6 | bbb |
| 7 | ccc |
+----+------+

truncate t17;這種刪除不僅清理資料,而且會清理id的自動計數。





庫(檔案夾)詳細操作:
1.資料庫區分大小寫
2.不能使用關鍵字

格式為:
create table 庫名.表名(
欄位名1 類型[(寬度) 約束條件],
欄位名2 類型[(寬度) 約束條件],
欄位名3 類型[(寬度) 約束條件]
);
約束條件:是在資料類型之外對欄位附加的額外的限制

注意:
1、最後一個欄位之後不能加逗號
2. 在同一張表中,欄位名是不能相同
3. 寬度和約束條件可選,欄位名和類型是必須的


例如:
create table t4 ( id int, age int, sex char);
庫名.表名(欄位名 類型 [(寬度,約束條件)] ) 注意:一般情況下中括弧裡面的為可選項目



整數類型:

1.tinyint:預設是有符號的(-128,127)
show create table t5;
+-------+----------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------+
| t5 | CREATE TABLE `t5` (
`x` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
insert into t5 values(-1); #可以輸入驗證是有符號的

正常情況
insert into t5 values(-127);
+------+
| x |
+------+
| -1 |
| -127 |
+------+
異常情況:(非strict 模式如果輸入的超出範圍,會按照最接近的極限值填充)
mysql> insert into t5 values(-129);
Query OK, 1 row affected, 1 warning (0.06 sec)

mysql> select * from t5;
+------+
| x |
+------+
| -1 |
| -127 |
| -128 |
+------+
3 rows in set (0.00 sec)


設定strict 模式:
更改前:select @@sql_mode;
+------------------------+
| @@sql_mode |
+------------------------+
| NO_ENGINE_SUBSTITUTION | #初始模式
+------------------------+
1 row in set (0.00 sec)
更改:set global sql_mode=‘strict_trans_tables‘; (改後要重啟用戶端)
mysql> insert into t5 values(128);
ERROR 1264 (22003): Out of range value for column ‘x‘ at row 1 #再次輸入會報錯
mysql> select @@sql_mode;
+---------------------+
| @@sql_mode |
+---------------------+
| STRICT_TRANS_TABLES | #模式已經發生變化
+---------------------+
1 row in set (0.00 sec)


tinyint整數類型:轉變為無符號(0-255)
create table t6 (x tinyint unsigned);
mysql> desc t6;
+-------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| x | tinyint(3) unsigned | YES | | NULL | |
+-------+---------------------+------+-----+---------+-------+
1 row in set (0.02 sec)

2.int類型:不是限制儲存寬度,限制的是顯示寬度
create table t7(id int(5));
insert into t7 values(30000);
mysql> select * from t7;
mysql> select * from t7;
+-------+
| id |
+-------+
| 30000 | #id int(5) 是指佔5個字元,不夠的前面是指是用控制填充的
| 1 |
| 2 |
| 33 |
| 333 |
+-------+

int內建的就是11位(-10總共11位有符號範圍),所以不需要指定寬度,預設會有的,最合理



3.浮點型:
格式:float(所有位元,小數位)
create table t8(x float(255,30));
create table t9(x double(255,30));
create table t10(x decimal(65,30));

精確度查看:decimal精度是最高的
insert into t8 values(1.11111111111111111111111);

insert into t9 values(1.11111111111111111111111);

insert into t10 values(1.11111111111111111111111);
mysql> select * from t8;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select * from t9;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
mysql> select * from t10;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+

一般情況下用float精度就已經夠用了。


4.日期類型:

首先造一個student的檔案:設定好檔案頭應有的屬性
create table student(
id int primary key auto_increment,
name char(16),
born_year year,
birth date,
class_time time,
reg_time datetime
);

mysql> desc student;
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(16) | YES | | NULL | |
| born_year | year(4) | YES | | NULL | |
| birth | date | YES | | NULL | |
| class_time | time | YES | | NULL | |
| reg_time | datetime | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
6 rows in set (0.02 sec)

增加每個屬性的值:
insert into student(name,born_year,birth,class_time,reg_time) values(‘yzz‘,now(),now(),now(),now());

查看錶格結果:
mysql> select * from student;
+----+------+-----------+------------+------------+---------------------+
| id | name | born_year | birth | class_time | reg_time |
+----+------+-----------+------------+------------+---------------------+
| 1 | yzz | 2018 | 2018-07-19 | 22:26:10 | 2018-07-19 22:26:10 |
+----+------+-----------+------------+------------+---------------------+
1 row in set (0.00 sec)


自己去設定日期和時間:
insert into student(name,born_year,birth,class_time,reg_time) values
(‘egon1‘,2000,‘2000-11-11‘,"08:30:00",20171111111111);
#1.不加引號,數字在一塊兒,系統預設輸出會不全-
#2.如果加引號“08:30:00”,裡面按照輸入的格式來填寫,
輸出結果:年-月-日 時:分:秒 這樣的格式

5.字元類型:自動補的空格是靠後補齊的
char:定長
varchar:變長

相同點:寬度指的都是最大儲存的字元個數,超過了都無法正常儲存

不同點:
char(5) :
‘m‘--->‘m ‘5個字元 #給1個m就補4個字元
varchar(5):
‘m‘--->‘m‘1個字元 #給1個就存1個字元

超出範圍會報錯:
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(2) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
mysql> insert into t12(id,name) values(1,‘yangzhizong‘),(2,‘m‘);
1406 - Data too long for column ‘name‘ at row 1

開啟strict 模式:超出設定長度會報錯
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH"

+----+------+
| id | name |
+----+------+
| 1 | ya |
| 2 | m | #右邊有空格計算長度時是忽略的
+----+------+
select char_length(name) from t12;
注意點:
1.右邊加的空格計算長度時不會自動加進去
2.左邊的會自動加進去
insert into t12 (id,name) values(6,‘ zhangsan‘),(7,‘ lisi‘),(8,‘ yangzhi‘);
+-------------------+
| char_length(name) |
+-------------------+
| 2 |
| 1 |
| 8 |
| 3 |
| 3 |
| 10 |
| 8 |
| 10 |
+-------------------+


注意:mysql在查詢時針對where 欄位="值 "會忽略掉右面的空格,即where 欄位="值"
左邊有空格時候:select * from t12 where name=" yangzhi“ 後面必須要加上空格
右邊有空格時候:查詢時可以手動加空格,也可以不用加空格

1.上面的尋找方式資料精準匹配;
2. 如果時like模糊比對就不會忽略右面的空格了
+----+------------+
| id | name |
+----+------------+
| 1 | ya |
| 2 | m |
| 3 | mawenjie |
| 4 | mwj |
| 5 | yzz |
| 6 | zhangsan |
| 7 | lisi |
| 8 | yangzhi |
+----+------------+
select * from t12 where name like "m%"; #任意無窮個,所有m開頭的
+----+----------+
| id | name |
+----+----------+
| 2 | m |
| 3 | mawenjie |
| 4 | mwj |
+----+----------+
select * from t12 where name like"m_"; #任意一個例如:mi,後面只跟一個字元,即統計所有m開頭的2個字元
select * from t12 where name like"m_ _ _"; 可以跟你要尋找的位元(底線之間沒有空格,為了說明效果)

varchar:存好存,取不好取,需要在前面另外加一個頭進去,例如下面虛擬碼:
char(5)
egon |axx |lxx |fm |

varchar(5)
1bytes+egon|1bytes+axx|1bytes+lxx|1bytes+fm|


6.枚舉與集合類型
枚舉enum(‘a‘,‘b‘,‘c‘):多選一
集合set(‘a‘,‘b‘,‘c‘):多選多
create table t13(name varchar(15),sex enum(‘mame‘,‘female‘,‘unkown‘),hobbies set(‘read‘,‘music‘,‘play‘)); 錄入
desc t13; 查看
+---------+--------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------------------------+------+-----+---------+-------+
| name | varchar(15) | YES | | NULL | |
| sex | enum(‘mame‘,‘female‘,‘unkown‘) | YES | | NULL | |
| hobbies | set(‘read‘,‘music‘,‘play‘) | YES | | NULL | |
+---------+--------------------------------+------+-----+---------+-------+

記錄資訊:限定使用者從enum枚舉、set集合裡面裡面去選擇輸入
insert into t13 values(‘zhangsan‘,‘female‘,‘play‘); 選擇單個

insert into t13 values(‘lisi‘,‘mame‘,‘music,play,read‘); 集合可算選多個































Mysql基本語句

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.