1. 程式人生 > 實用技巧 >mysql_複習01

mysql_複習01

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。
什麼是四捨六入五成雙?
  • 就是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
    --| :--: | :--: |
    條件刪除 | 不支援 | 不支援 | 支援
    刪除表結構 | 支援 | 不支援 | 不支援
    事務的方式刪除 | 不支援 | 不支援 | 支援
    觸發觸發器 | 否 | 否 | 是