共計(jì) 12673 個(gè)字符,預(yù)計(jì)需要花費(fèi) 32 分鐘才能閱讀完成。
本篇內(nèi)容介紹了“mysql 入門(mén)基礎(chǔ)知識(shí)點(diǎn)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓丸趣 TV 小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
一、開(kāi)始使用
MySQL 為關(guān)系型數(shù)據(jù)庫(kù) (Relational Database Management System),一個(gè)關(guān)系型數(shù)據(jù)庫(kù)由一個(gè)或數(shù)個(gè)表格組成, 表格一般包括以下:
表頭 (header): 每一列的名稱;
列 (col): 具有相同數(shù)據(jù)類(lèi)型的數(shù)據(jù)的集合;
行 (row): 每一行用來(lái)描述某個(gè)人 / 物的具體信息;
值 (value): 行的具體信息, 每個(gè)值必須與該列的數(shù)據(jù)類(lèi)型相同;
鍵 (key): 表中用來(lái)識(shí)別某個(gè)特定的人 \ 物的方法, 鍵的值在當(dāng)前列中具有唯一性。
二、登錄 MySQL
mysql -h 127.0.0.1 -u 用戶名 -p
mysql -D 所選擇的數(shù)據(jù)庫(kù)名 -h 主機(jī)名 -u 用戶名 -p
三、創(chuàng)建數(shù)據(jù)庫(kù)
對(duì)于表的操作需要先進(jìn)入庫(kù) use 庫(kù)名;
-- 創(chuàng)建一個(gè)名為 samp_db 的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)字符編碼指定為 utf8 create database samp_db character set utf8; drop database samp_db; -- 刪除 庫(kù)名為 samp_db 的庫(kù) show databases; -- 顯示數(shù)據(jù)庫(kù)列表。 use samp_db; -- 選擇創(chuàng)建的數(shù)據(jù)庫(kù) samp_db show tables; -- 顯示 samp_db 下面所有的表名字 describe 表名; -- 顯示數(shù)據(jù)表的結(jié)構(gòu) delete from 表名; -- 清空表中記錄
四、創(chuàng)建數(shù)據(jù)庫(kù)表
使用 create table 語(yǔ)句可完成對(duì)表的創(chuàng)建, create table 的常見(jiàn)形式: 語(yǔ)法:create table 表名稱 (列聲明);
-- 如果數(shù)據(jù)庫(kù)中存在 user_accounts 表,就把它從數(shù)據(jù)庫(kù)中 drop 掉 DROP TABLE IF EXISTS `user_accounts`; CREATE TABLE `user_accounts` ( `id` int(100) unsigned NOT NULL AUTO_INCREMENT primary key, `password` varchar(32) NOT NULL DEFAULT COMMENT 用戶密碼 , `reset_password` tinyint(32) NOT NULL DEFAULT 0 COMMENT 用戶類(lèi)型:0-不需要重置密碼;1- 需要重置密碼 , `mobile` varchar(20) NOT NULL DEFAULT COMMENT 手機(jī) , `create_at` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `update_at` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), -- 創(chuàng)建唯一索引,不允許重復(fù) UNIQUE INDEX idx_user_mobile(`mobile`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT= 用戶表信息
數(shù)據(jù)類(lèi)型的屬性解釋
NULL:數(shù)據(jù)列可包含 NULL 值;
NOT NULL:數(shù)據(jù)列不允許包含 NULL 值;
DEFAULT:默認(rèn)值;
PRIMARY KEY:主鍵;
AUTO_INCREMENT:自動(dòng)遞增,適用于整數(shù)類(lèi)型;
UNSIGNED:是指數(shù)值類(lèi)型只能為正數(shù);
CHARACTER SET name:指定一個(gè)字符集;
COMMENT:對(duì)表或者字段說(shuō)明;
五、增刪改查
1、SELECT
SELECT 語(yǔ)句用于從表中選取數(shù)據(jù)。
語(yǔ)法:SELECT 列名稱 FROM 表名稱
語(yǔ)法:SELECT * FROM 表名稱
-- 表 station 取個(gè)別名叫 s,表 station 中不包含 字段 id=13 或者 14 的,并且 id 不等于 4 的 查詢出來(lái),只顯示 id SELECT s.id from station s WHERE id in (13,14) and id not in (4); -- 從表 Persons 選取 LastName 列的數(shù)據(jù) SELECT LastName FROM Persons -- 從表 users 選取 id=3 的數(shù)據(jù),并只拉一條數(shù)據(jù) (據(jù)說(shuō)能優(yōu)化性能) SELECT * FROM users where id=3 limit 1 -- 結(jié)果集中會(huì)自動(dòng)去重復(fù)數(shù)據(jù) SELECT DISTINCT Company FROM Orders -- 表 Persons 字段 Id_P 等于 Orders 字段 Id_P 的值, -- 結(jié)果集顯示 Persons 表的 LastName、FirstName 字段,Orders 表的 OrderNo 字段 SELECT p.LastName, p.FirstName, o.OrderNo FROM Persons p, Orders o WHERE p.Id_P = o.Id_P -- gbk 和 utf8 中英文混合排序最簡(jiǎn)單的辦法 -- ci 是 case insensitive, 即 “大小寫(xiě)不敏感” SELECT tag, COUNT(tag) from news GROUP BY tag order by convert(tag using gbk) collate gbk_chinese_ci; SELECT tag, COUNT(tag) from news GROUP BY tag order by convert(tag using utf8) collate utf8_unicode_ci;
2、UPDATE
Update 語(yǔ)句用于修改表中的數(shù)據(jù)。
語(yǔ)法:UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
-- update 語(yǔ)句設(shè)置字段值為另一個(gè)結(jié)果取出來(lái)的字段 update user set name = (select name from user1 where user1 .id = 1 ) where id = (select id from user2 where user2 .name= 小蘇 -- 更新表 orders 中 id=1 的那一行數(shù)據(jù)更新它的 title 字段 UPDATE `orders` set title= 這里是標(biāo)題 WHERE id=1;
3、INSERT
INSERT INTO 語(yǔ)句用于向表格中插入新的行。
語(yǔ)法:INSERT INTO 表名稱 VALUES (值 1, 值 2,….)
語(yǔ)法:INSERT INTO 表名稱 (列 1, 列 2,…) VALUES (值 1, 值 2,….)
-- 向表 Persons 插入一條字段 LastName = JSLite 字段 Address = shanghai INSERT INTO Persons (LastName, Address) VALUES (JSLite , shanghai -- 向表 meeting 插入 字段 a=1 和字段 b=2 INSERT INTO meeting SET a=1,b=2; -- SQL 實(shí)現(xiàn)將一個(gè)表的數(shù)據(jù)插入到另外一個(gè)表的代碼 -- 如果只希望導(dǎo)入指定字段,可以用這種方法: -- INSERT INTO 目標(biāo)表 ( 字段 1, 字段 2, ...) SELECT 字段 1, 字段 2, ... FROM 來(lái)源表; INSERT INTO orders (user_account_id, title) SELECT m.user_id, m.title FROM meeting m where m.id=1; -- 向表 charger 插入一條數(shù)據(jù),已存在就對(duì)表 charger 更新 `type`,`update_at` 字段; INSERT INTO `charger` (`id`,`type`,`create_at`,`update_at`) VALUES (3,2, 2017-05-18 11:06:17 , 2017-05-18 11:06:17) ON DUPLICATE KEY UPDATE `id`=VALUES(`id`), `type`=VALUES(`type`), `update_at`=VALUES(`update_at`);
4、DELETE
DELETE 語(yǔ)句用于刪除表中的行。
語(yǔ)法:DELETE FROM 表名稱 WHERE 列名稱 = 值
-- 在不刪除 table_name 表的情況下刪除所有的行,清空表。 DELETE FROM table_name -- 或者 DELETE * FROM table_name -- 刪除 Person 表字段 LastName = JSLite DELETE FROM Person WHERE LastName = JSLite -- 刪除 表 meeting id 為 2 和 3 的兩條數(shù)據(jù) DELETE from meeting where id in (2,3);
5、WHERE
WHERE 子句用于規(guī)定選擇的標(biāo)準(zhǔn)。
語(yǔ)法:SELECT 列名稱 FROM 表名稱 WHERE 列 運(yùn)算符 值
-- 從表 Persons 中選出 Year 字段大于 1965 的數(shù)據(jù) SELECT * FROM Persons WHERE Year 1965
六、操作符
1、AND 和 OR
AND – 如果第一個(gè)條件和第二個(gè)條件都成立;
OR – 如果第一個(gè)條件和第二個(gè)條件中只要有一個(gè)成立;
1.1、AND
-- 刪除 meeting 表字段 -- id=2 并且 user_id=5 的數(shù)據(jù) 和 -- id=3 并且 user_id=6 的數(shù)據(jù) DELETE from meeting where id in (2,3) and user_id in (5,6); -- 使用 AND 來(lái)顯示所有姓為 Carter 并且名為 Thomas 的人: SELECT * FROM Persons WHERE FirstName= Thomas AND LastName= Carter
1.2、OR
-- 使用 OR 來(lái)顯示所有姓為 Carter 或者名為 Thomas 的人: SELECT * FROM Persons WHERE firstname= Thomas OR lastname= Carter
2、ORDER BY
語(yǔ)句默認(rèn)按照升序?qū)τ涗涍M(jìn)行排序。
ORDER BY – 語(yǔ)句用于根據(jù)指定的列對(duì)結(jié)果集進(jìn)行排序。
DESC – 按照降序?qū)τ涗涍M(jìn)行排序。
ASC – 按照順序?qū)τ涗涍M(jìn)行排序。
-- Company 在表 Orders 中為字母,則會(huì)以字母順序顯示公司名稱 SELECT Company, OrderNumber FROM Orders ORDER BY Company -- 后面跟上 DESC 則為降序顯示 SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC -- Company 以降序顯示公司名稱,并 OrderNumber 以順序顯示 SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
3、IN
IN – 操作符允許我們?cè)?WHERE 子句中規(guī)定多個(gè)值。
IN – 操作符用來(lái)指定范圍,范圍中的每一條,都進(jìn)行匹配。IN 取值規(guī)律,由逗號(hào)分割,全部放置括號(hào)中。語(yǔ)法:SELECT 字段名 FROM 表格名 WHERE 字段名 IN (值一 , 值二 , …);
-- 從表 Persons 選取 字段 LastName 等于 Adams、Carter SELECT * FROM Persons WHERE LastName IN (Adams , Carter)
4、NOT
NOT – 操作符總是與其他操作符一起使用,用在要過(guò)濾的前面。
SELECT vend_id, prod_name FROM Products WHERE NOT vend_id = DLL01 ORDER BY prod_name;
5、UNION
UNION – 操作符用于合并兩個(gè)或多個(gè) SELECT 語(yǔ)句的結(jié)果集。
-- 列出所有在中國(guó)表(Employees_China)和美國(guó)(Employees_USA)的不同的雇員名 SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA -- 列出 meeting 表中的 pic_url, -- station 表中的 number_station 別名設(shè)置成 pic_url 避免字段不一樣報(bào)錯(cuò) -- 按更新時(shí)間排序 SELECT id,pic_url FROM meeting UNION ALL SELECT id,number_station AS pic_url FROM station ORDER BY update_at; -- 通過(guò) UNION 語(yǔ)法同時(shí)查詢了 products 表 和 comments 表的總記錄數(shù),并且按照 count 排序 SELECT product AS type, count(*) as count FROM `products` union select comment as type, count(*) as count FROM `comments` order by count;
6、AS
as – 可理解為:用作、當(dāng)成,作為;別名
一般是重命名列名或者表名。
語(yǔ)法:select column_1 as 列 1,column_2 as 列 2 from table as 表
SELECT * FROM Employee AS emp -- 這句意思是查找所有 Employee 表里面的數(shù)據(jù),并把 Employee 表格命名為 emp。 -- 當(dāng)你命名一個(gè)表之后,你可以在下面用 emp 代替 Employee. -- 例如 SELECT * FROM emp. SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders -- 列出表 Orders 字段 OrderPrice 列最大值, -- 結(jié)果集列不顯示 OrderPrice 顯示 LargestOrderPrice -- 顯示表 users_profile 中的 name 列 SELECT t.name from (SELECT * from users_profile a) AS t; -- 表 user_accounts 命名別名 ua,表 users_profile 命名別名 up -- 滿足條件 表 user_accounts 字段 id 等于 表 users_profile 字段 user_id -- 結(jié)果集只顯示 mobile、name 兩列 SELECT ua.mobile,up.name FROM user_accounts as ua INNER JOIN users_profile as up ON ua.id = up.user_id;
7、JOIN
用于根據(jù)兩個(gè)或多個(gè)表中的列之間的關(guān)系,從這些表中查詢數(shù)據(jù)。
JOIN: 如果表中有至少一個(gè)匹配,則返回行
INNER JOIN: 在表中存在至少一個(gè)匹配時(shí),INNER JOIN 關(guān)鍵字返回行。
LEFT JOIN: 即使右表中沒(méi)有匹配,也從左表返回所有的行
RIGHT JOIN: 即使左表中沒(méi)有匹配,也從右表返回所有的行
FULL JOIN: 只要其中一個(gè)表中存在匹配,就返回行 (MySQL 是不支持的,通過(guò) LEFT JOIN + UNION + RIGHT JOIN 的方式 來(lái)實(shí)現(xiàn))
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName;
七、SQL 函數(shù)
1、COUNT
COUNT 讓我們能夠數(shù)出在表格中有多少筆資料被選出來(lái)。
語(yǔ)法:SELECT COUNT(字段名) FROM 表格名
-- 表 Store_Information 有幾筆 store_name 欄不是空白的資料。 -- IS NOT NULL 是 這個(gè)欄位不是空白 的意思。 SELECT COUNT (Store_Name) FROM Store_Information WHERE Store_Name IS NOT NULL; -- 獲取 Persons 表的總數(shù) SELECT COUNT(1) AS totals FROM Persons; -- 獲取表 station 字段 user_id 相同的總數(shù) select user_id, count(*) as totals from station group by user_id;
2、MAX
MAX 函數(shù)返回一列中的最大值。NULL 值不包括在計(jì)算中。
語(yǔ)法:SELECT MAX(字段名) FROM 表格名
-- 列出表 Orders 字段 OrderPrice 列最大值, -- 結(jié)果集列不顯示 OrderPrice 顯示 LargestOrderPrice SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders
3、round
ROUND 函數(shù)用于把數(shù)值字段舍入為指定的小數(shù)位數(shù)。
語(yǔ)法:SELECT ROUND(column_name,decimals) FROM table_name
-- 列出名稱和價(jià)格舍入為最接近的整數(shù) SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products
4、format
FORMAT 函數(shù)用于對(duì)字段的顯示進(jìn)行格式化。
語(yǔ)法:SELECT FORMAT(column_name,format) FROM table_name
-- 顯示每天日期所對(duì)應(yīng)的名稱和價(jià)格(日期的顯示格式是 YYYY-MM-DD) SELECT ProductName, UnitPrice, FORMAT(Now(), YYYY-MM-DD ) as PerDate FROM Products
5、ucase
UCASE 函數(shù)把字段的值轉(zhuǎn)換為大寫(xiě)。
語(yǔ)法:SELECT UCASE(column_name) FROM table_name
-- 選取 LastName 和 FirstName 列的內(nèi)容,然后把 LastName 列轉(zhuǎn)換為大寫(xiě)。 SELECT UCASE(LastName) as LastName,FirstName FROM Persons
6、lcase
LCASE 函數(shù)把字段的值轉(zhuǎn)換為小寫(xiě)。
語(yǔ)法:SELECT LCASE(column_name) FROM table_name
-- 選取 LastName 和 FirstName 列的內(nèi)容,然后把 LastName 列轉(zhuǎn)換為小寫(xiě) SELECT LCASE(LastName) as LastName,FirstName FROM Persons
八、觸發(fā)器
語(yǔ)法: create trigger 觸發(fā)器名稱 {before | after} # 之前或者之后出發(fā) insert | update | delete # 指明了激活觸發(fā)程序的語(yǔ)句的類(lèi)型 on 表名 # 操作哪張表 for each row # 觸發(fā)器的執(zhí)行間隔,for each row 通知觸發(fā)器每隔一行執(zhí)行一次動(dòng)作,而不是對(duì)整個(gè)表執(zhí)行一次。觸發(fā)器 SQL 語(yǔ)句
delimiter $ CREATE TRIGGER set_userdate BEFORE INSERT on `message` for EACH ROW BEGIN set @statu = new.status; -- 聲明復(fù)制變量 statu if @statu = 0 then -- 判斷 statu 是否等于 0 UPDATE `user_accounts` SET status=1 WHERE openid=NEW.openid; end if; END $ DELIMITER ; -- 恢復(fù)結(jié)束符號(hào)
OLD 和 NEW 不區(qū)分大小寫(xiě)
NEW 用 NEW.col_name,沒(méi)有舊行。在 DELETE 觸發(fā)程序中,僅能使用 OLD.col_name,沒(méi)有新行。
OLD 用 OLD.col_name 來(lái)引用更新前的某一行的列
九、添加索引
1、普通索引 (INDEX)
語(yǔ)法:ALTER TABLE 表名字 ADD INDEX 索引名字 (字段名字)
-- ndash; 直接創(chuàng)建索引 CREATE INDEX index_user ON user(title) -- ndash; 修改表結(jié)構(gòu)的方式添加索引 ALTER TABLE table_name ADD INDEX index_name ON (column(length)) -- 給 user 表中的 name 字段 添加普通索引 (INDEX) ALTER TABLE `user` ADD INDEX index_name (name) -- ndash; 創(chuàng)建表的時(shí)候同時(shí)創(chuàng)建索引 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), INDEX index_name (title(length)) ) -- ndash; 刪除索引 DROP INDEX index_name ON table
2、主鍵索引 (PRIMARY key)
語(yǔ)法:ALTER TABLE 表名字 ADD PRIMARY KEY (字段名字)
-- 給 user 表中的 id 字段 添加主鍵索引 (PRIMARY key) ALTER TABLE `user` ADD PRIMARY key (id);
3、唯一索引 (UNIQUE)
語(yǔ)法:ALTER TABLE 表名字 ADD UNIQUE (字段名字)
-- 給 user 表中的 creattime 字段添加唯一索引 (UNIQUE) ALTER TABLE `user` ADD UNIQUE (creattime);
4、全文索引 (FULLTEXT)
語(yǔ)法:ALTER TABLE 表名字 ADD FULLTEXT (字段名字)
-- 給 user 表中的 description 字段添加全文索引 (FULLTEXT) ALTER TABLE `user` ADD FULLTEXT (description);
5、添加多列索引
語(yǔ)法:ALTER TABLE table_name ADD INDEX index_name (column1, column2, column3)
-- 給 user 表中的 name、city、age 字段添加名字為 name_city_age 的普通索引 (INDEX) ALTER TABLE user ADD INDEX name_city_age (name(10),city,age);
6、建立索引的時(shí)機(jī)
在 WHERE 和 JOIN 中出現(xiàn)的列需要建立索引,但也不完全如此:
MySQL 只對(duì),=,=,,=,BETWEEN,IN 使用索引
某些時(shí)候的 LIKE 也會(huì)使用索引。
在 LIKE 以通配符 % 和_開(kāi)頭作查詢時(shí),MySQL 不會(huì)使用索引。
-- 此時(shí)就需要對(duì) city 和 age 建立索引, -- 由于 mytable 表的 userame 也出現(xiàn)在了 JOIN 子句中,也有對(duì)它建立索引的必要。 SELECT t.Name FROM mytable t LEFT JOIN mytable m ON t.Name=m.username WHERE m.age=20 AND m.city= 上海 SELECT * FROM mytable WHERE username like admin% -- 而下句就不會(huì)使用: SELECT * FROM mytable WHERE Name like %admin -- 因此,在使用 LIKE 時(shí)應(yīng)注意以上的區(qū)別。
十、創(chuàng)建后表的修改
1、添加列
語(yǔ)法:alter table 表名 add 列名 列數(shù)據(jù)類(lèi)型 [after 插入位置];
示例:
-- 在表 students 的最后追加列 address: alter table students add address char(60); -- 在名為 age 的列后插入列 birthday: alter table students add birthday date after age; -- 在名為 number_people 的列后插入列 weeks: alter table students add column `weeks` varchar(5) not null default after `number_people`;
2、修改列
語(yǔ)法:alter table 表名 change 列名稱 列新名稱 新數(shù)據(jù)類(lèi)型;
-- 將表 tel 列改名為 telphone: alter table students change tel telphone char(13) default - -- 將 name 列的數(shù)據(jù)類(lèi)型改為 char(16): alter table students change name name char(16) not null; -- 修改 COMMENT 前面必須得有類(lèi)型屬性 alter table students change name name char(16) COMMENT 這里是名字 -- 修改列屬性的時(shí)候 建議使用 modify, 不需要重建表 -- change 用于修改列名字,這個(gè)需要重建表 alter table meeting modify `weeks` varchar(20) NOT NULL DEFAULT COMMENT 開(kāi)放日期 周一到周日:0~6,間隔用英文逗號(hào)隔開(kāi) -- `user` 表的 `id` 列,修改成字符串類(lèi)型長(zhǎng)度 50,不能為空,`FIRST` 放在第一列的位置 alter table `user` modify COLUMN `id` varchar(50) NOT NULL FIRST ;
3、刪除列
語(yǔ)法:alter table 表名 drop 列名稱;
-- 刪除表 students 中的 birthday 列: alter table students drop birthday;
4、重命名表
語(yǔ)法:alter table 表名 rename 新表名;
-- 重命名 students 表為 workmates: alter table students rename workmates;
5、清空表數(shù)據(jù)
方法一:delete from 表名; 方法二:truncate table 表名
DELETE:1. DML 語(yǔ)言;2. 可以回退;3. 可以有條件的刪除;
TRUNCATE:1. DDL 語(yǔ)言;2. 無(wú)法回退;3. 默認(rèn)所有的表內(nèi)容都刪除;4. 刪除速度比 delete 快。
-- 清空表為 workmates 里面的數(shù)據(jù),不刪除表。 delete from workmates; -- 刪除 workmates 表中的所有數(shù)據(jù),且無(wú)法恢復(fù) truncate table workmates;
6、刪除整張表
語(yǔ)法:drop table 表名;
-- 刪除 workmates 表: drop table workmates;
7、刪除整個(gè)數(shù)據(jù)庫(kù)
語(yǔ)法:drop database 數(shù)據(jù)庫(kù)名;
-- 刪除 samp_db 數(shù)據(jù)庫(kù): drop database samp_db;
十一、其它
1、SQL 刪除重復(fù)記錄
-- 查找表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來(lái)判斷 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) 1) -- 刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來(lái)判斷,只留有 rowid 最小的記錄 delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId ) 1) -- 查找表中多余的重復(fù)記錄(多個(gè)字段) select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1) -- 刪除表中多余的重復(fù)記錄(多個(gè)字段),只留有 rowid 最小的記錄 delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*) 1) -- 查找表中多余的重復(fù)記錄(多個(gè)字段),不包含 rowid 最小的記錄 select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*) 1)
“mysql 入門(mén)基礎(chǔ)知識(shí)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實(shí)用文章!