MySql基礎(chǔ)-常用函數(shù)

創(chuàng)建數(shù)據(jù)庫

CREATE DATABASE d_name CHARACTER SET utf8 COLLATE utf8_bin;
  • CHARACTER:指定字符集
  • COLLATE:指定校對(duì)規(guī)則
    • utf8_general_ci:默認(rèn):不區(qū)分大小寫
    • utf8_bin:區(qū)分大小寫

創(chuàng)建數(shù)據(jù)庫用戶

創(chuàng)建賬戶:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
username:用戶名
host:本地訪問,如果需要遠(yuǎn)程訪問,改成%
password:密碼

例子:CREATE USER 'test'@'host' IDENTIFIED BY 'test';
//創(chuàng)建了一個(gè)test的用戶,密碼也是test,這個(gè)賬號(hào)只能本地訪問數(shù)據(jù)庫

授權(quán)
GRANT privileges ON databasename.tablename TO 'username'@'host' 
privileges:用戶的操作權(quán)限,如SELECT,INSERT,UPDATE等,如果要授予所的權(quán)限則使用ALL
databasename:數(shù)據(jù)庫名
tablename:表名,如果要授予該用戶對(duì)所有數(shù)據(jù)庫和表的相應(yīng)操作權(quán)限則可用*表示,如*.*

例子:
GRANT all ON test TO 'test'@'host';
//給test賬戶訪問本地test庫的所有權(quán)限。


更新root權(quán)限:
update user set Host='localhost',select_priv='y', insert_priv='y',update_priv='y',Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root';
更新完畢后,需要重啟mysql服務(wù)哦

查詢數(shù)據(jù)據(jù)

查詢?nèi)繑?shù)據(jù)庫:

SHOW DATABASES;

查詢某個(gè)數(shù)據(jù)庫創(chuàng)建語句:

SHOW CREATE DATABASE d_name;

備份數(shù)據(jù)庫

導(dǎo)出數(shù)據(jù)庫stu和test到D盤的data.sql中

在DOS中執(zhí)行回車后輸入密碼即可:

mysqldump -u root -p -B stu test > d:\\data.sql

恢復(fù)數(shù)據(jù)

先登錄數(shù)據(jù)庫

C:\Users\Fireice-Jxb>mysql -u root -p
Enter password: ****

然后恢復(fù)數(shù)據(jù)

mysql> source d:\\data.sql

備份指定數(shù)據(jù)庫中的表

mysqldump -u root -p 數(shù)據(jù)庫 表1 表2... > d:\\data.sql

恢復(fù)數(shù)據(jù)和上面一樣

創(chuàng)建表

基礎(chǔ)語法

CREATE TABLE table_name(
    filed1 int,
    filed1 int,
    ...
)
CHARACTER SET 字符集:沒有指定就按照所在數(shù)據(jù)庫為準(zhǔn)
COLLATE 校對(duì)規(guī)則:沒有指定就按照所在數(shù)據(jù)庫為準(zhǔn)
ENGINE 存儲(chǔ)引擎

列類型

數(shù)值類型

  • 整數(shù)
    • tinyint[1字節(jié)]
    • bit[填1-64]
    • smallint[2字節(jié)]
    • mediumint[3字節(jié)]
    • int[4字節(jié)]
    • bigint[8字節(jié)]
  • 小數(shù)
    • float[4字節(jié)]
    • double[8字節(jié)]
    • decimal[可以指定精確位數(shù)]

文本類型

  • char[0-255]
  • varchar[0-65535] [0-2^16-1]
  • text[0-65535] [0-2^16-1]
  • longtext[0-2^32-1]

二進(jìn)制數(shù)據(jù)

  • blob[0-2^16-1]
  • longblob[0-2^32-1]

日期類型

  • date[日期:年月日]
  • time[時(shí)間:時(shí)分秒]
  • datetime[年月日時(shí)分秒:YYYY-MM-DD HH:mm:ss]
  • timestamp[時(shí)間戳]

修改表

修改表名稱

RENAME TABLE user TO people;

修改字符集

ALTER TABLE people CHARACTER SET utf8;

在user表中age字段后面添加一列job并且不為空,設(shè)定默認(rèn)值

ALTER TABLE user ADD job VARCHAR(20)
NOT NULL
DEFAULT '默認(rèn)值'
AFTER age;

修改列

ALTER TABLE user
MODIFY job VARCHAR(30)
NOT NULL
DEFAULT '程序員'
AFTER age;

刪除列

ALTER TABLE user DROP job;

修改列名稱

ALTER TABLE people 
CHANGE des
descript VARCHAR(50) NOT NULL DEFAULT '';

增刪改查[CRUD]

增加列

INSERT INTO people (id,name,age,descript)
VALUES (4,'李四',22,'長得真的很帥');

修改列

UPDATE people SET id=6,name='趙武' WHERE id IS NULL;

刪除列

DELETE FROM people WHERE id=6;

查詢?nèi)ブ?/p>

SELECT DISTINCT age FROM people;

查詢運(yùn)算+取別名

SELECT (age+10) AS '年齡' FROM people;

WHERE運(yùn)算符

1.>,<,>=,<=,=,<>,!=
2.BETWEEN ... AND ...
3.IN(set)
4.LIKE ''/NOT LIKE ''
5.IS NULL
6.and,or,not

模糊查詢

SELECT name AS '名字',age AS '年齡' FROM people
WHERE name LIKE '李%';

order by子句

order by可以指定列名也可以指定列的別名,asc默認(rèn):升序,desc:降序排序

年齡從大到小

SELECT * FROM people ORDER BY age DESC;

合計(jì)函數(shù)

統(tǒng)計(jì)個(gè)數(shù)

SELECT COUNT(age) FROM people WHERE age>20;
#count(*)返回滿足條件的記錄函數(shù)
#count(列名稱)統(tǒng)計(jì)滿足條件的某列有多少個(gè),會(huì)排除為null的情況

求總和

#年齡的總和,注意sum函數(shù)只能對(duì)數(shù)值類型使用
SELECT SUM(age) AS'年齡總和' FROM people;

求平均數(shù)

SELECT AVG(age) AS '平均年齡' FROM people;

最大最小值

SELECT MAX(age) AS '最大年齡',
MIN(age) AS '最小年齡' FROM people;

分組統(tǒng)計(jì)

練習(xí)表

#刪除表
DROP TABLE d_user;
#創(chuàng)建新的表
CREATE TABLE d_user (
id INT NOT NULL PRIMARY KEY auto_increment COMMENT '序號(hào)',
name VARCHAR(20) NOT NULL DEFAULT 'name' COMMENT '姓名',
sex CHAR(2) NOT NULL DEFAULT '男' COMMENT '性別',
age int NOT NULL DEFAULT 18 COMMENT '年齡',
des VARCHAR(50) NOT NULL DEFAULT '正常人' COMMENT '描述'
);
#查詢一下
SELECT * FROM d_user;
#隨便插入語句
INSERT INTO d_user VALUES(DEFAULT,'張三',DEFAULT,20,'相貌俊美');
INSERT INTO d_user VALUES(DEFAULT,'李四',DEFAULT,19,'能吃是福');
INSERT INTO d_user VALUES(DEFAULT,'王五',DEFAULT,22,'相貌俊美');
INSERT INTO d_user VALUES(DEFAULT,'趙六',DEFAULT,DEFAULT,'相貌俊美');
INSERT INTO d_user VALUES(DEFAULT,'周七','女',17,'美若天仙');
INSERT INTO d_user VALUES(DEFAULT,'朱八','女',19,'天女下凡');

分組查詢

SELECT MAX(age) FROM d_user GROUP BY sex;

Having往往配合group by一起使用

SELECT MAX(age) FROM d_user GROUP BY sex HAVING MAX(age) > 20;
#取別名的方式效率更高
SELECT MAX(age) AS aaa FROM d_user GROUP BY sex HAVING aaa > 20;

字符串相關(guān)函數(shù)

01. CHARSET(str)#返回字符串字符集
02. CONCAT(str1,str2,...)#連接字符串
03. INSTR(str,substr)#返回substr在str中的位置,沒有就是0
04. UCASE(str)#轉(zhuǎn)成大寫
05. LCASE(str)#轉(zhuǎn)成小寫
06. LEFT(str,len)#從左取len個(gè)字符
07. LENGTH(str)#返回str的字節(jié)長度
08. REPLACE(str,from_str,to_str)#str中使用to_str替換from_str
09. STRCMP(expr1,expr2)#逐個(gè)比較字符串大小
10. SUBSTRING(str,pos,len)#從str的pos位置開始取len個(gè)字符
11. LTRIM(str)#去除左邊空格
12. RTRIM(str)#去除右邊空格

查詢某個(gè)字符串的字符集

SELECT CHARSET(name) FROM d_user;
#utf8

連接

SELECT CONCAT(name,'的年齡是',age) AS '年齡' FROM d_user;
#連接成一列

字符位置

SELECT INSTR('abcdefg','c') FROM DUAL;
#結(jié)果:3;DUAL是系統(tǒng)自帶的亞元表,可以作為一個(gè)測(cè)試表來使用

替換

SELECT name,REPLACE(sex,'男','boy') AS '性別' FROM d_user;

數(shù)學(xué)相關(guān)函數(shù)

01.ABS(X)#絕對(duì)值
02.BIN(N)#十進(jìn)制轉(zhuǎn)換為二進(jìn)制
03.CEILING(X)#向上取整
04.CONV(N,from_base,to_base)#進(jìn)制轉(zhuǎn)換
05.FLOOR(X)#向下取整
06.FORMAT(X,D)#保留D位小數(shù)位
07.HEX(N_or_S)#轉(zhuǎn)換為十六進(jìn)制
08.LEAST(value1,value2,...)#求最小值
09.MOD(N,M)#求余數(shù)
10.RAND([seed])#隨機(jī)數(shù):范圍0-1.0

8轉(zhuǎn)化為二進(jìn)制輸出

SELECT CONV(8,10,2) FROM DUAL;

隨機(jī)數(shù)

SELECT RAND() FROM DUAL;
#每次運(yùn)行都會(huì)產(chǎn)生隨機(jī)數(shù)
SELECT RAND(2) FROM DUAL;
#每次運(yùn)行都會(huì)產(chǎn)生隨機(jī)數(shù),但是如果第二次運(yùn)行時(shí)
#seed的值依然是2,那么隨機(jī)數(shù)還是之前的
#如果每次seed不一樣都會(huì)生成不一樣的隨機(jī)數(shù)

日期函數(shù)

01. CURRENT_DATE#當(dāng)前日期
02. CURRENT_TIME#當(dāng)前時(shí)間
03. CURRENT_TIMESTAMP#當(dāng)前時(shí)間戳
04. DATE(expr)#返回expr中的日期部分
05. DATE_ADD(date,INTERVAL expr unit)#在date增加日期或者時(shí)間
06. DATE_SUB(date,INTERVAL expr unit)#在date減去時(shí)間
07. DATEDIFF(expr1,expr2)#求日期差(天)
08. TIMEDIFF(expr1,expr2)#求時(shí)間差(時(shí)分秒)
09. NOW()#返回當(dāng)前年月日時(shí)分秒
10. YEAR(date)#獲取date中的年
11. MONTH(date)#獲取date中的月
12. FROM_UNIXTIME(unix_timestamp)#獲取date中的年月日

創(chuàng)建一個(gè)練習(xí)表

#創(chuàng)建時(shí)間 表
CREATE TABLE time(
id INT PRIMARY KEY auto_increment COMMENT '編號(hào)',
name VARCHAR(10) NOT NULL DEFAULT '北京新聞' COMMENT '時(shí)間名稱',
time DATETIME);
#插入數(shù)據(jù)
INSERT INTO time VALUES(DEFAULT,DEFAULT,CURRENT_TIMESTAMP());
INSERT INTO time VALUES(DEFAULT,'廣州',NOW());
INSERT INTO time VALUES(DEFAULT,'上海',NOW());
#查詢一下
SELECT * FROM time;

查詢十分鐘之內(nèi)發(fā)布過的新聞

SELECT * FROM time WHERE DATE_ADD(time,INTERVAL 10 MINUTE) >= NOW();

假如你能活到80歲,那么你能活多少天?

SELECT DATEDIFF('2080-05-22',NOW()) FROM DUAL;

轉(zhuǎn)換時(shí)間戳

#獲取int類型的時(shí)間戳
SELECT UNIX_TIMESTAMP() FROM DUAL;
#通過時(shí)間戳獲得Date類型
SELECT FROM_UNIXTIME('1621070046','%Y-%m-%d %H:%i:%s') FROM DUAL;

加密函數(shù)

#md5加密,幾乎不可逆
SELECT MD5('root');

#顯示用戶名和ip地址
SELECT USER() FROM DUAL;

#數(shù)據(jù)庫默認(rèn)密碼加密
SELECT PASSWORD('root');
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容