mysql_複習01
阿新 • • 發佈:2020-12-02
mysql複習筆記
開啟和關閉
- 管理員執行cmd,開啟net start mysql2001
- 關閉 net stop mysql2001
mysql2001是自己安裝時候取的名字
檢視版本
- 在mysql裡面輸入命令
select version();
常用命令
- 顯示資料庫: show databases;
- 進入指定資料庫: use 庫名;
- 檢視當前資料庫所有表: show tables;
- 檢視其他庫中所有表: show tables from 庫名;
- 查看錶結構: desc 表名;
- 檢視當前所在庫: select database();
- 檢視當前mysql支援的儲存引擎: show engines;
- 檢視系統變數及值: show variables;
- 檢視某個系統變數: show variables like '變數名';
mysql其他知識
註釋
- 單行註釋: #註釋
- 單行註釋: -- 註釋(註釋前面於--之間有空格)
- 多行註釋: /* 註釋 */
mysql的資料型別
整數型別
- tinyint smallint mediumint int bigint 他們位元組數不同
- 分為有符號和無符號(unsigned)
- 型別n
int(n) 這裡面的n是顯示寬度,如果需要顯示寬度的值,用零補zerofill
浮點型
- float[(m,d)]
- double[(m,d)]
- decimal[(m,d)]
- m為總長度,d為小數點後面的長度
- 預設值:
- float和double在不指定精度時,預設會按照實際的精度來顯示,而DECIMAL在不指定精度時,預設整
數為10,小數為0。
- float和double在不指定精度時,預設會按照實際的精度來顯示,而DECIMAL在不指定精度時,預設整
什麼是四捨六入五成雙?
- 就是5以下捨棄5以上進位,如果需要處理數字為5的時候,需要看5後面是否還有不為0的任何數字,如果有,則直接進位,如果沒有,需要看5前面的數字,若是奇數則進位,若是偶數則將5舍掉
如果插入的資料沒有限定,那麼他們將會按實際情況來插入.
** 注意銀行計算財政使用decimal**
日期型別
字串型別
MYSQL管理員通常使用的一些命令
檢視mysql中所有使用者
- 使用者在使用mysql.user表中,
- use mysql / select user,host from user;
建立使用者
- 看mysql詳細筆記
DDL常見操作彙總
- DDL:Data Define Language資料定義語言,主要用來對資料庫、表進行一些管理操作。
- 如:建庫、刪庫、建表、修改表、刪除表、對列的增刪改等等。
庫命令
- 建立庫
create database 庫名;
create database [if no exists]庫名
- 刪除庫
drop databases 庫名;
drop databases[if exists] 庫名;
- 通常建庫通用方法
drop databases if exists 舊庫名;
create database 新庫名;
表管理
create table 表名(
欄位名1 型別[(寬度)] [約束條件] [comment '欄位說明'],
欄位名2 型別[(寬度)] [約束條件] [comment '欄位說明'],
欄位名3 型別[(寬度)] [約束條件] [comment '欄位說明']
)[表的一些設定];
- 上面約束條件有以下幾種
- not null: 標識該欄位不能為空
- default value: 為該欄位設定預設值,預設值為value
- primary key:標識該欄位為該表的主鍵,可以唯一的標識記錄,插入重複的會報錯
create table text01(
a int not null comment '這是欄位a' primary key,
b int not null default 0 comment '這是欄位b'
)
primary(主鍵)使用方法
1 跟在列後
create table text02(
a int not null comment '這是欄位' primary key
# 主鍵在後面
)
2 在所有列後面定義
drop table if exists text03;
create table text03(
a int not nul comment '這是文字說明',
primary key(a)
)
3 在後面多欄位作為主鍵,多個用逗號隔開 語法
drop table if exists text04;
create table text04(
a int not null comment '欄位a',
b int not null comment '欄位b',
primary key (a, b)
# 將a,b都設為主鍵了
)
foreign key: 為表中設定外來鍵
- 語法:
foreign key(當前表中的列名) references 引用外來鍵表(外來鍵表中欄位名稱)
unique key(uq): 標識欄位唯一的
- 使用方法有三種與上面primary一樣
auto_increment
- 概念:標識該欄位的值自動增長(整數型別,而且為主鍵)
sql語句
- 顯示建立表: show create table 表名;
- 刪除表: drop table [if exists] 表名;
- 修改表名: alter table 表名 rename [to] 新表名;
- 表設定備註: alter table 表名 comment '備註資訊'
- 複製表
- 只複製表結構: create table 表名 like 被複制的表名
- 賦值表結構及表資料: create table 表名 as select 欄位 from 被複制的表 [where條件]
刪除表裡面的資料 delete from 表名
列管理
- 新增列
alter table 表名 add column 列名 型別 [列約束]
alter table temp add column test int not null default 0 comment '我是欄位'
- 修改列
alter table 表名 modify column 列名 新型別 [約束]
# 或者
alter table 表名 change column 列名 新列名 新型別 [約束]
modify只能修改型別,但是change可以修改名字和型別
- 刪除列
alter table 表名 drop column 列名;
DML常見操作
- DML 以INSERT,UPDATE,DELETE三種指令為核心(插入,更新,刪除)
插入操作
插入單行兩種方式
- 方法一
insert into 表名[(欄位,欄位)] values(值,值);
說明: 至於欄位要一一對應.如果是字元型別,日期型別用單引號括起來。不能為空的地方必須要插入值。不必須的但為空使用null
- 方法二
insert into 表名 set 欄位 = 值,欄位 = 值;
方法二不常見,建議使用方法一
批量插入2種方式
- 方法一:
insert into 表名 [(欄位,欄位)] values(值,值),(值,值),(值,值);
[]為可選
- 方法二:
insert into 表 [(欄位,欄位)]
資料來源於select;
資料更新
單表更新
- 語法:
update 表名 [[as] 別名] set [別名.]欄位 = 值,[別名.]欄位 = 值 [where條件];
update test1 as t set t.a = 3;
update test1 t set t.a = 1;
多表更新
- 語法:
update 表1 [[as] 別名1],表名2 [[as] 別名2]
set [別名.]欄位 = 值,[別名.]欄位 = 值
[where條件]
建議使用單表,便於維護!
刪除資料
delete單表刪除
delete [別名] from 表名 [[as] 別名] [where條件]
注意:
如果無別名的時候,表名就是別名
如果有別名,delete後面必須寫別名
如果沒有別名,delete後面的別名可以省略不寫。
# 例項:
-- 刪除test1所有記錄
delete from test1;
-- 刪除test表中所有記錄
delete test1 from test1;
-- 有別名方式,刪除test1所有記錄
delete t1 from test1 t1;
-- 有別名方式刪除滿足條件的所有記錄
delete t1 from test1 t1 where t1.a = 1;
-- 刪除滿足別名t1表裡面t1.a欄位等於1的值
多表刪除
- 語法:
delete [別名1,別名2] from 表1 [[as] 別名1],表2 [[as] 別名2] [where條件];
別名後面可以省略不寫,但是delete後面跟上表名.多表面之間用逗號隔開
例子: delete from test2,test3 where t2.a = t3.b;
使用truncate刪除
- 語法:
truncate 表名;
- drop,truncate,delete區別
- drop (刪除表):刪除內容和定義,釋放空間,簡單來說就是把整個表去掉,以後要新增資料是不
可能的,除非新增一個表。
drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger)索引(index),依賴
於該表的儲存過程/函式將被保留,但其狀態會變為:invalid。
如果要刪除表定義及其資料,請使用 drop table 語句。 - truncate (清空表中的資料):刪除內容、釋放空間但不刪除定義(保留表的資料結構),與drop不同
的是,只是清空表資料而已。
注意:truncate不能刪除具體行資料,要刪就要把整個表清空了。 - delete (刪除表中的資料):delete 語句用於刪除表中的行。delete語句執行刪除的過程是每次從表
中刪除一行,並且同時將該行的刪除操作作為事務記錄在日誌中儲存,以便進行進行回滾操作。
truncate與不帶where的delete :只刪除資料,而不刪除表的結構(定義)
truncate table 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。
對於由foreign key約束引用的表,不能使用truncate table ,而應使用不帶where子句的delete語
句。由於truncate table 記錄在日誌中,所以它不能啟用觸發器。
delete語句是資料庫操作語言(dml),這個操作會放到 rollback segement 中,事務提交之後才生
效;如果有相應的 trigger,執行的時候將被觸發。
truncate、drop 是資料庫定義語言(ddl),操作立即生效,原資料不放到 rollback segment 中,
不能回滾,操作不觸發 trigger。
如果有自增列,truncate方式刪除之後,自增列的值會被初始化,delete方式要分情況(如果數
據庫被重啟了,自增列值也會被初始化,資料庫未被重啟,則不變) - 如果要刪除表定義及其資料,請使用 drop table 語句
- 安全性:小心使用 drop 和 truncate,尤其沒有備份的時候,否則哭都來不及
- 刪除速度,一般來說: drop> truncate > delete
drop | truncate | delete
--| :--: | :--: |
條件刪除 | 不支援 | 不支援 | 支援
刪除表結構 | 支援 | 不支援 | 不支援
事務的方式刪除 | 不支援 | 不支援 | 支援
觸發觸發器 | 否 | 否 | 是