停止命令:net stop mysql
啟動命令:net start mysql
mysql登錄命令mysql -h ip -P 端口 -u 用戶名 -p
mysql --version 或者mysql -V用于在未登錄情況下,查看本機(jī)mysql版本
select version();:登錄情況下,查看鏈接的庫版本
顯示所有數(shù)據(jù)庫:show databases;
進(jìn)入指定的庫:use 庫名;
顯示當(dāng)前庫中所有的表:show tables;
查看其他庫中所有的表:show tables from 庫名;
查看表的創(chuàng)建語句:show create table 表名;
查看表結(jié)構(gòu):desc 表名;
查看當(dāng)前所在庫:select database();
mysql語法規(guī)范
SQL的語言分類
主要包括以下五大類
整數(shù)類型:bit、bool、tinyint、smallint、mediumint、int、bigint
浮點(diǎn)數(shù)類型:float、double、decimal
字符串類型:char、varchar、tinyblob、blob、mediumblob、longblob、tinytext、text、mediumtext、longtext
日期類型:Date、DateTime、TimeStamp、Time、Year
其他數(shù)據(jù)類型:暫不介紹,用的比較少。
類型(n)說明在開發(fā)中,我們會碰到有些定義整型的寫法是int(11),這種寫法個人感覺在開發(fā)過程中沒有什么用途,不過還是來說一下,int(N)我們只需要記住兩點(diǎn):
decimal采用的是四舍五入
float和double采用的是四舍六入五成雙
什么是四舍六入五成雙?
char類型占用固定長度,如果存放的數(shù)據(jù)為固定長度的建議使用char類型,如:手機(jī)號碼、身份證等固定長度的信息
數(shù)據(jù)類型選擇的一些建議
權(quán)限生效時間用戶及權(quán)限信息放在庫名為mysql的庫中,mysql啟動時,這些內(nèi)容被讀進(jìn)內(nèi)存并且從此時生效,所以如果通過直接操作這些表來修改用戶及權(quán)限信息的,需要重啟mysql或者執(zhí)行flush privileges;才可以生效。
用戶登錄之后,mysql會和當(dāng)前用戶之間創(chuàng)建一個連接,此時用戶相關(guān)的權(quán)限信息都保存在這個連接中,存放在內(nèi)存中,此時如果有其他地方修改了當(dāng)前用戶的權(quán)限,這些變更的權(quán)限會在下一次登錄時才會生效。
創(chuàng)建用戶語法:
create user 用戶名[@主機(jī)名] [identified by '密碼'];
通過修改mysql.user表修改密碼
use mysql;
update user set authentication_string = password('321') where user = 'test1' and host = '%';
flush privileges;
給用戶授權(quán):
grant privileges ON database.table TO 'username'[@'host'] [with grant option]
grant命令說明:
查看用戶有哪些權(quán)限show grants for '用戶名'[@'主機(jī)']
show grants -- 查看當(dāng)前用戶的權(quán)限
撤銷用戶的權(quán)限:revoke privileges ON database.table FROM '用戶名'[@'主機(jī)'];
刪除用戶:
1.drop user '用戶名'[@'主機(jī)’]
2.delete from user where user='用戶名' and host='主機(jī)';
授權(quán)原則說明
總結(jié)
修改列alter table 表名 modify column 列名 新類型 [約束];
或者
alter table 表名 change column 列名 新列名 新類型 [約束];
2種方式區(qū)別:modify不能修改列名,change可以修改列名
delete單表刪除delete [別名] from 表名 [[as] 別名] [where條件];
示例-- 刪除test1表所有記錄delete from test1;
-- 刪除test1表所有記錄delete test1 from test1;
-- 有別名的方式,刪除test1表所有記錄delete t1 from test1 t1;
-- 有別名的方式刪除滿足條件的記錄delete t1 from test1 t1 where t1.a>100;
多表刪除
delete [別名1,別名2] from 表1 [[as] 別名1],表2 [[as] 別名2] [where條件];
示例1delete t1 from test1 t1,test2 t2 where t1.a=t2.c2;
drop,truncate,delete區(qū)別
別名中有特殊符號的,比如空格,此時別名必須用引號引起來。
不等于符號的使用:
<> 這個是最早的用法。
!=是后來才加上的。
兩者意義相同,在可移植性上前者優(yōu)于后者
故而sql語句中盡量使用<>來做不等判斷
like(模糊查詢)select 列名 from 表名 where 列 like pattern;
查詢運(yùn)算符、like、between and、in、not in對NULL值查詢不起效
<=>(安全等于)<=>:既可以判斷NULL值,又可以判斷普通的數(shù)值,可讀性較低,用得較少
總結(jié)
語法:
select 列 from 表 limit [offset,] count;
limit中不能使用表達(dá)式,limit后面的2個數(shù)字不能為負(fù)數(shù)字段存在相同的值,當(dāng)排序過程中存在相同的值時,沒有其他排序規(guī)則時,mysql懵逼了,不知道怎么排序了;
建議:分頁排序時,排序不要有二義性,二義性情況下可能會導(dǎo)致分頁結(jié)果亂序,可以在后面追加一個主鍵排序
where 多字段同時限制:
SELECT
user_id 用戶id,
price 最大金額,
the_year 年份
FROM
t_order t1
WHERE
(t1.user_id , t1.price)
IN
(SELECT
t.user_id, MAX(t.price)
FROM
t_order t
GROUP BY t.user_id);
現(xiàn)在我們來討論java輸出的順序?yàn)楹魏蛃ql不一致?
那mysql是如何優(yōu)化的呢?
delimiter關(guān)鍵字 sql語句結(jié)束符delimiter用來設(shè)置結(jié)束符,當(dāng)mysql執(zhí)行腳本的時候,遇到結(jié)束符的時候,會把結(jié)束符前面的所有語句作為一個整體運(yùn)行,存儲過程中的腳本有多個sql,但是需要作為一個整體運(yùn)行,所以此處用到了delimiter
/*在執(zhí)行過程中出任何異常設(shè)置hasSqlError為TRUE*/
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET hasSqlError=TRUE;
根據(jù)hasSqlError判斷是否有異常,做回滾和提交操作
mysql使用binlog和relaylog記錄數(shù)據(jù)庫的變化
binlog有三種格式:ROW STATEMENT MIXED ,ROW記錄national數(shù)據(jù)被修改了,修改成了什么樣子;STATEMENT 記錄修改的sql到binlog;MIXED就是以上兩種模式的混合。
binlog是一個二進(jìn)制文件,解析binlog有兩種方式:
1.在命令行使用,show binlog events in 'binlog-filename';方式查看
2.下載分析binlog,然后通過mysqlbinlog工具進(jìn)行解析
扇區(qū):磁盤存儲的最小單位,扇區(qū)一般大小為512Byte
磁盤塊:文件系統(tǒng)與磁盤交互的最小單位(計算機(jī)系統(tǒng)讀寫磁盤的最小單位),一個磁盤塊由連續(xù)幾個扇區(qū)組成,塊一般大小為4KB
二分法查找數(shù)據(jù)的優(yōu)點(diǎn):定位數(shù)據(jù)非???,前提是:目標(biāo)數(shù)組是有序的。
總結(jié)一下使用索引的一些建議
|
|