日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 1

發(fā)布時(shí)間:2025/3/20 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 1 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
關(guān)系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql語句通用 非關(guān)系型:mongodb,redis,memcache
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng)
MySQL是最好的?RDBMS?(Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件。
MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,
由于其體積小、速度快、總體擁有成本低,
尤其是開放源碼這一特點(diǎn),一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫。 mysql -uroot -p set password = password('root'); # 給當(dāng)前數(shù)據(jù)庫設(shè)置密碼 create user 'eva'@'%' #指示所有機(jī)器都可以連接 show grants for 'eva'@'192.168.10.5';查看某個(gè)用戶的權(quán)限 mysql -uroot -p123 -h 192.168.10.3 #遠(yuǎn)程登錄 grant all on *.* to 'eva'@'%'; #授權(quán) flush privileges; # 刷新使授權(quán)立即生效 grant all on *.* to 'eva'@'%' identified by '123' # 創(chuàng)建賬號(hào)并授權(quán)

SQL :?結(jié)構(gòu)化查詢語言(Structured Query Language)

SQL語言主要用于存取數(shù)據(jù)、查詢數(shù)據(jù)、更新數(shù)據(jù)和管理關(guān)系數(shù)據(jù)庫系統(tǒng),SQL語言由IBM開發(fā)。

1、DDL語句? ? 定義: 數(shù)據(jù)庫、表、視圖、索引、存儲(chǔ)過程,create drop alter

2、DML語句? ?操縱: insert delete update select

3、DCL語句? ? 控制: 例如控制用戶的訪問權(quán)限 grant revoke(廢除 撤銷)

1. 操作文件夾(庫)增:create database db1 charset utf8;查:show databases;改:alter database db1 charset latin1;刪除: drop database db1;2. 操作文件(表)先切換到文件夾下:use db1增:create table t1(id int,name char);查:show tables;改:alter table t1 modify name char(3);alter table t1 change name name1 char(2);刪:drop table t1;3. 操作文件中的內(nèi)容(記錄)增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');查:select * from t1;改:update t1 set name='sb' where id=2;刪:delete from t1 where id=1;清空表:delete from t1; #如果有自增id,新增的數(shù)據(jù),仍然是以刪除前的最后一樣作為起始。truncate table t1;數(shù)據(jù)量大,刪除速度比上一條快,且直接從零開始,*auto_increment 表示:自增 *primary key 表示:約束(不能重復(fù)且不能為空);加速查找

mysql?存儲(chǔ)引擎

InnoDB、MyISAM、MEMORY 、BLACKHOLE(黑洞)

InnoDB

用于事務(wù)處理應(yīng)用程序,支持外鍵和行級(jí)鎖。如果應(yīng)用對(duì)事物的完整性有比較高的要求,在并發(fā)條件下要求數(shù)據(jù)的一致性,數(shù)據(jù)操作除了插入和查詢之外,還包括很多更新和刪除操作,那么InnoDB存儲(chǔ)引擎是比較合適的。InnoDB除了有效的降低由刪除和更新導(dǎo)致的鎖定,還可以確保事務(wù)的完整提交和回滾,對(duì)于類似計(jì)費(fèi)系統(tǒng)或者財(cái)務(wù)系統(tǒng)等對(duì)數(shù)據(jù)準(zhǔn)確要求性比較高的系統(tǒng)都是合適的選擇。

MyISAM

如果應(yīng)用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對(duì)事務(wù)的完整性、并發(fā)性要求不高,那么可以選擇這個(gè)存儲(chǔ)引擎。

Memory

將所有的數(shù)據(jù)保存在內(nèi)存中,在需要快速定位記錄和其他類似數(shù)據(jù)的環(huán)境下,可以提供極快的訪問。Memory的缺陷是對(duì)表的大小有限制,雖然數(shù)據(jù)庫因?yàn)楫惓=K止的話數(shù)據(jù)可以正常恢復(fù),但是一旦數(shù)據(jù)庫關(guān)閉,存儲(chǔ)在內(nèi)存中的數(shù)據(jù)都會(huì)丟失。

存儲(chǔ)引擎相關(guān)sql語句

查看當(dāng)前的默認(rèn)存儲(chǔ)引擎: show variables like "default_storage_engine"; 查詢當(dāng)前數(shù)據(jù)庫支持的存儲(chǔ)引擎 show engines \G;

指定存儲(chǔ)引擎建表

在建表時(shí)指定?

create table ai(id bigint(12),name varchar(200)) ENGINE=MyISAM;

create table country(id int(4),cname varchar(50)) ENGINE=InnoDB;

也可以使用alter table語句,修改一個(gè)已經(jīng)存在的表的存儲(chǔ)引擎。 alter table ai engine = innodb;

在配置文件中指定

#my.ini文件 [mysqld] default-storage-engine=INNODB

MySQL架構(gòu) 四層

1?連接處理、授權(quán)認(rèn)證、安全等

2?MySQL的核心服務(wù)。包括:查詢解析、分析、優(yōu)化、緩存以及所有的內(nèi)置函數(shù)(例如:日期、時(shí)間、數(shù)學(xué)和加密函數(shù))

3?存儲(chǔ)引擎。存儲(chǔ)引擎負(fù)責(zé)MySQL中數(shù)據(jù)的存儲(chǔ)和提取。

4?文件系統(tǒng),所有的表結(jié)構(gòu)和數(shù)據(jù)以及用戶操作的日志最終還是以文件的形式存儲(chǔ)在硬盤上。

查看表結(jié)構(gòu) desc 表名; show create table 表名\G;

mysql 支持的數(shù)據(jù)類型

https://www.cnblogs.com/Eva-J/articles/9683316.html

表的完整性約束

https://www.cnblogs.com/Eva-J/articles/9687915.html

主鍵? 外鍵? 聯(lián)級(jí)更新? 聯(lián)級(jí)刪除

#表類型必須是innodb存儲(chǔ)引擎,且被關(guān)聯(lián)的字段,即references指定的另外一個(gè)表的字段,必須保證唯一 create table department( id int primary key, name varchar(20) not null )engine=innodb;#dpt_id外鍵,關(guān)聯(lián)父表(department主鍵id),同步更新,同步刪除 create table employee( id int primary key, name varchar(20) not null, dpt_id int, foreign key(dpt_id) references department(id) on delete cascade # 連級(jí)刪除 on update cascade # 連級(jí)更新 )engine=innodb;#先往父表department中插入記錄 insert into department values (1,'教質(zhì)部'), (2,'技術(shù)部'), (3,'人力資源部');#再往子表employee中插入記錄 insert into employee values (1,'yuan',1), (2,'nezha',2), (3,'egon',2), (4,'alex',2), (5,'wusir',3), (6,'李沁洋',3), (7,'皮卡丘',3), (8,'程咬金',3), (9,'程咬銀',3) ;#刪父表department,子表employee中對(duì)應(yīng)的記錄跟著刪 mysql> delete from department where id=2; Query OK, 1 row affected (0.00 sec)mysql> select * from employee; +----+-----------+--------+ | id | name | dpt_id | +----+-----------+--------+ | 1 | yuan | 1 | | 5 | wusir | 3 | | 6 | 李沁洋 | 3 | | 7 | 皮卡丘 | 3 | | 8 | 程咬金 | 3 | | 9 | 程咬銀 | 3 | +----+-----------+--------+ 6 rows in set (0.00 sec)#更新父表department,子表employee中對(duì)應(yīng)的記錄跟著改 mysql> update department set id=2 where id=3; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from employee; +----+-----------+--------+ | id | name | dpt_id | +----+-----------+--------+ | 1 | yuan | 1 | | 5 | wusir | 2 | | 6 | 李沁洋 | 2 | | 7 | 皮卡丘 | 2 | | 8 | 程咬金 | 2 | | 9 | 程咬銀 | 2 | +----+-----------+--------+ 6 rows in set (0.00 sec)

修改 表結(jié)構(gòu)

alter table 表名 rename 新表名;

alter table 表名 add??字段名 數(shù)據(jù)類型 [完整性約束條件…];

alter table 表名 drop 字段名

alter table 表名 modify?字段名 數(shù)據(jù)類型 [完整性約束條件…];

alter table 表名 change 舊字段名 新字段名 舊數(shù)據(jù)類型(完整約束條件);

alter table 表名?change 舊字段名 新字段名 新數(shù)據(jù)類型(完整約束條件)

修改字段排列順序/在增加的時(shí)候指定字段位置ALTER TABLE 表名ADD 字段名 數(shù)據(jù)類型 [完整性約束條件…] FIRST;ALTER TABLE 表名ADD 字段名 數(shù)據(jù)類型 [完整性約束條件…] AFTER 字段名;ALTER TABLE 表名CHANGE 字段名 舊字段名 新字段名 新數(shù)據(jù)類型 [完整性約束條件…] FIRST;ALTER TABLE 表名MODIFY 字段名 數(shù)據(jù)類型 [完整性約束條件…] AFTER 字段名; alter table staff modify sex enum('male','female') after sname;alter table staff modify id int(4) primary key auto_increment;刪除主鍵 需要先去掉主鍵的自增約束,然后再刪除主鍵約束 alter table staff modify id int(11); alter table staff drop primary key;alter table staff add primary key (sname,age); alter table staff drop primary key; alter table staff add primary key (id); alter table staff modify id int(4) auto_increment; -----多對(duì)一------ create table press( id int primary key auto_increment, name varchar(20) );create table book( id int primary key auto_increment, name varchar(20), press_id int not null, foreign key(press_id) references press(id) on delete cascade on update cascade ); 更新數(shù)據(jù)update update 表名 set 字段1=值1,字段2=值2,where condition; 實(shí)例 UPDATE mysql.user SET password=password(‘123’) where user=’root’ and host=’localhost’; ------------------------------------------------------ 刪除數(shù)據(jù) delete delete from 表名 where condition; 例子 DELETE FROM mysql.user WHERE password=’’;

單表查詢

-------語法---------- SELECT 字段1,字段2... FROM 表名WHERE 條件GROUP BY fieldHAVING 篩選ORDER BY fieldLIMIT 限制條數(shù)
------
關(guān)鍵字執(zhí)行的優(yōu)先級(jí)--------------
from > where > group by > having > select > distinct > order by > limit --簡單查詢-- https://www.cnblogs.com/Eva-J/articles/9688313.html ---where約束--- 1. 比較運(yùn)算符:> < >= <= <> != 2. between 80 and 100 值在10到20之間 3. in(80,90,100) 值是10或20或30 4. like 'egon%'pattern可以是%或_,%表示任意多字符_表示一個(gè)字符 5. 邏輯運(yùn)算符:在多個(gè)條件直接可以使用邏輯運(yùn)算符 and or not---- group by ---------- 單獨(dú)使用GROUP BY關(guān)鍵字分組SELECT post FROM employee GROUP BY post;注意:我們按照post字段分組,那么select查詢的字段只能是post,想要獲取組內(nèi)的其他相關(guān)信息,需要借助函數(shù)GROUP BY關(guān)鍵字和GROUP_CONCAT()函數(shù)一起使用SELECT post,GROUP_CONCAT(emp_name) FROM employee GROUP BY post;#按照崗位分組,并查看組內(nèi)成員名SELECT post,GROUP_CONCAT(emp_name) as emp_members FROM employee GROUP BY post;GROUP BY與聚合函數(shù)一起使用select post,count(id) as count from employee group by post;#按照崗位分組,并查看每個(gè)組有多少人 ---------------------------------------------------------- 如果我們用unique的字段作為分組的依據(jù),則每一條記錄自成一組,這種分組沒有意義 多條記錄之間的某個(gè)字段值相同,該字段通常用來作為分組的依據(jù) ----------------------------------------------------------- 聚合函數(shù) #強(qiáng)調(diào):聚合函數(shù)聚合的是組的內(nèi)容,若是沒有分組,則默認(rèn)一組 SELECT COUNT(*) FROM employee;SELECT COUNT(*) FROM employee WHERE depart_id=1;SELECT MAX(salary) FROM employee;SELECT MIN(salary) FROM employee;SELECT AVG(salary) FROM employee;SELECT SUM(salary) FROM employee;SELECT SUM(salary) FROM employee WHERE depart_id=3; -------------------------------------------------------------- HAVING過濾 #!!!執(zhí)行優(yōu)先級(jí)從高到低:where > group by > having #1. Where 發(fā)生在分組group by之前,因而Where中可以有任意字段,但是絕對(duì)不能使用聚合函數(shù)。 #2. Having發(fā)生在分組group by之后,因而Having中可以使用分組的字段,無法直接取到其他字段,可以使用聚合函數(shù) ------------------------------------------------------------ ORDER BY 查詢排序 按單列排序SELECT * FROM employee ORDER BY salary;SELECT * FROM employee ORDER BY salary ASC;SELECT * FROM employee ORDER BY salary DESC;按多列排序:先按照age排序,如果年紀(jì)相同,則按照薪資排序SELECT * from employeeORDER BY age,salary DESC; ------------------------------------------------------------- LIMIT 限制查詢的記錄數(shù) SELECT * FROM employee ORDER BY salary DESC LIMIT 3; #默認(rèn)初始位置為0 SELECT * FROM employee ORDER BY salary DESCLIMIT 0,5; #從第0開始,即先查詢出第一條,然后包含這一條在內(nèi)往后查5條SELECT * FROM employee ORDER BY salary DESCLIMIT 5,5; #從第5開始,即先查詢出第6條,然后包含這一條在內(nèi)往后查5條 ----------------------------------------------------------- 使用正則表達(dá)式查詢 SELECT * FROM employee WHERE emp_name REGEXP '^ale';SELECT * FROM employee WHERE emp_name REGEXP 'on$';SELECT * FROM employee WHERE emp_name REGEXP 'm{2}';小結(jié):對(duì)字符串匹配的方式 WHERE emp_name = 'egon'; WHERE emp_name LIKE 'yua%'; WHERE emp_name REGEXP 'on$';

多表查詢

#重點(diǎn):外鏈接語法 SELECT 字段列表FROM 表1 INNER|LEFT|RIGHT JOIN 表2ON 表1.字段 = 表2.字段; #示例1:以內(nèi)連接的方式查詢employee和department表,并且employee表中的age字段值必須大于25,即找出年齡大于25歲的員工以及員工所在的部門 select employee.name,department.name from employee inner join departmenton employee.dep_id = department.idwhere age > 25;#示例2:以內(nèi)連接的方式查詢employee和department表,并且以age字段的升序方式顯示 select employee.id,employee.name,employee.age,department.name from employee,departmentwhere employee.dep_id = department.idand age > 25order by age asc;

子查詢

#1:子查詢是將一個(gè)查詢語句嵌套在另一個(gè)查詢語句中。 #2:內(nèi)層查詢語句的查詢結(jié)果,可以為外層查詢語句提供查詢條件。 #3:子查詢中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等關(guān)鍵字 #4:還可以包含比較運(yùn)算符:= 、 !=、> 、<等 帶IN關(guān)鍵字的子查詢 ----------------------------------------------- #查詢平均年齡在25歲以上的部門名 select id,name from departmentwhere id in (select dep_id from employee group by dep_id having avg(age) > 25);#查看技術(shù)部員工姓名 select name from employeewhere dep_id in (select id from department where name='技術(shù)');#查看不足1人的部門名(子查詢得到的是有人的部門id) select name from department where id not in (select distinct dep_id from employee); ----------------------------------------------- 帶比較運(yùn)算符的子查詢 #比較運(yùn)算符:=、!=、>、>=、<、<=、<> #查詢大于所有人平均年齡的員工名與年齡 mysql> select name,age from emp where age > (select avg(age) from emp); +---------+------+ | name | age | +---------+------+ | alex | 48 | | wupeiqi | 38 | +---------+------+ 2 rows in set (0.00 sec)#查詢大于部門內(nèi)平均年齡的員工名、年齡 select t1.name,t1.age from emp t1 inner join (select dep_id,avg(age) avg_age from emp group by dep_id) t2 on t1.dep_id = t2.dep_id where t1.age > t2.avg_age; ----------------------------------------------- 帶EXISTS關(guān)鍵字的子查詢 -------------------------- EXISTS關(guān)字鍵字表示存在。在使用EXISTS關(guān)鍵字時(shí),內(nèi)層查詢語句不返回查詢的記錄。 而是返回一個(gè)真假值。True或False 當(dāng)返回True時(shí),外層查詢語句將進(jìn)行查詢;當(dāng)返回值為False時(shí),外層查詢語句不進(jìn)行查詢 -------------------------- #department表中存在dept_id=203,Ture select * from employee-> where exists-> (select id from department where id=200);#department表中存在dept_id=205,False select * from employee-> where exists-> (select id from department where id=204);

mysql 導(dǎo)入表

從init.sql文件中導(dǎo)入數(shù)據(jù) ------------------------------- #準(zhǔn)備表、記錄 mysql> create database db1; mysql> use db1; mysql> source /root/init.sql注意 Windows 下的 斜杠問題

轉(zhuǎn)載于:https://www.cnblogs.com/zhangchen-sx/p/10263666.html

總結(jié)

以上是生活随笔為你收集整理的mysql 1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。