mysql.基礎01
01. DDL
> 查詢所有資料庫: show databases;
> 查詢當前資料庫: select database(); //括號是必須要加的
> 建立資料庫: create database [if not exists] 資料庫名 [default charset 字符集] [collate 排序規則]
-> 關於字串: utf8 一個漢字存3位元組,但有些特殊符號會存4位元組,所以會使用 utf8md4 做為字符集
> 刪除: drop database [if exists] 資料庫名
> 使用: use 資料庫名;
> 檢視當前資料庫所有的表: show tables;
> 查詢表結構: desc 表名;
> 查詢指定表的建表語句: show create table 表名;
> 建立資料表
** mysql中的資料型別 (id tinyint unsigned -- 表示:新建表時,建立的是一個無符號珠 tinyint 欄位 id )
> 新增欄位: alter table 表名 add 欄位名 型別(長度) [comment 描述] [約束]
> 修改資料型別 alter table 表名 modify 欄位名 新資料型別(長度)
> 修改欄位名和欄位型別: alter table 表名 change 舊欄位名 新欄位名 型別(長度) [comment 描述] [約束];
> 刪除欄位:alter table 表名 drop 欄位名;
> 修改表名:alter table 表名 rename to 新表名;
> 刪除表:drop table [if exists] 表名;
> 刪除指定表並重新建立: truncate table 表名;
** 圖形化工具:
> sqlyog
> navicat
> DataGrid
02. DML
>新增指定欄位的資料: Insert into 表名(欄位1, 欄位2....) values (值1, 值2....)
> 新增的有欄位的資料 insert into 表名 values (值1,值2....)
> 批量新增資料
insert into 表名(欄位1,欄位2...) values (值1,值2...) ,(值1,值2...),(值1,值2...)...
insert into 表名 values (值1,值2...) ,(值1,值2...),(值1,值2...)...
** 插入字元串和日期型別的資料時,資料要包含在引號中;
> 修改資料 update 表名 set 欄位名1=值1, 欄位名2=值2,.... [where 條件]
> 刪除資料 delete from 表名 [where 條件]
03.DQL
> where 和 having 的區別
> 執行時機不同: where 是分組前過濾,不滿足where條件的,不參與分組;
having 是分組之後的結果進行過濾;
> 判斷條件不同: where不能對聚合函式進行判斷;having可以;
> 分頁查詢: select 欄位列表 from 表名 limit 起始索引, 查詢記錄數
>起始索引: 從0開始,起始索引=(查詢頁碼-1)*每頁記錄條數
> 分頁查詢是資料庫的方言,不同的資料庫有不同的實現;mysql中是 limit
> 如果查詢的是第1頁資料,起始索引可以省略,直接簡寫為 limit 每頁記錄數;
> 關於取欄位內值的長度的問題 (注意 length, char_length 的區別)
04.DCL
> 查詢使用者:
use mysql;
select * from user;
> 建立使用者 (此時無任何許可權)
create user '使用者名稱'@'主機名' identified by '密碼'
>> 若只限定在本機訪問,則主機名為: localhost
>> 若建立的賬號可在任意主機訪問資料庫,則 主機名為:%
> 修改使用者密碼
alter user '使用者名稱'@'主機名' identified with mysql_native_password by '新密碼'
> 刪除使用者
drop user '使用者名稱'@'主機名'
> 可控制的許可權
>查詢許可權: show grants for '使用者名稱'@'主機名'
> 授予許可權:grant 許可權列表 on 資料庫名.表名 to '使用者名稱'@'主機名'
> 撤銷許可權: revoke 許可權列表 on 資料庫名.表名 from '使用者名稱'@'主機名'
資料庫名.* 表示資料庫中所有的表