久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql入門基礎知識點有哪些

132次閱讀
沒有評論

共計 12673 個字符,預計需要花費 32 分鐘才能閱讀完成。

本篇內容介紹了“mysql 入門基礎知識點有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、開始使用

MySQL 為關系型數據庫 (Relational Database Management System),一個關系型數據庫由一個或數個表格組成, 表格一般包括以下:

表頭 (header): 每一列的名稱;

列 (col): 具有相同數據類型的數據的集合;

行 (row): 每一行用來描述某個人 / 物的具體信息;

值 (value): 行的具體信息, 每個值必須與該列的數據類型相同;

鍵 (key): 表中用來識別某個特定的人 \ 物的方法, 鍵的值在當前列中具有唯一性。

二、登錄 MySQL

mysql -h 127.0.0.1 -u  用戶名  -p
mysql -D  所選擇的數據庫名  -h  主機名  -u  用戶名  -p

三、創建數據庫

對于表的操作需要先進入庫 use 庫名;

--  創建一個名為  samp_db  的數據庫,數據庫字符編碼指定為  utf8 create database samp_db character set utf8; drop database samp_db; --  刪除   庫名為 samp_db 的庫  show databases; --  顯示數據庫列表。 use samp_db; --  選擇創建的數據庫 samp_db show tables; --  顯示 samp_db 下面所有的表名字  describe  表名; --  顯示數據表的結構  delete from  表名; --  清空表中記錄 

四、創建數據庫表

使用 create table 語句可完成對表的創建, create table 的常見形式: 語法:create table 表名稱 (列聲明);

--  如果數據庫中存在 user_accounts 表,就把它從數據庫中 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  用戶類型:0-不需要重置密碼;1- 需要重置密碼 , `mobile` varchar(20) NOT NULL DEFAULT   COMMENT  手機 , `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), --  創建唯一索引,不允許重復  UNIQUE INDEX idx_user_mobile(`mobile`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT= 用戶表信息 

數據類型的屬性解釋

NULL:數據列可包含 NULL 值;

NOT NULL:數據列不允許包含 NULL 值;

DEFAULT:默認值;

PRIMARY KEY:主鍵;

AUTO_INCREMENT:自動遞增,適用于整數類型;

UNSIGNED:是指數值類型只能為正數;

CHARACTER SET name:指定一個字符集;

COMMENT:對表或者字段說明;

五、增刪改查

1、SELECT

SELECT 語句用于從表中選取數據。

語法:SELECT 列名稱 FROM 表名稱

語法:SELECT * FROM 表名稱

--  表 station 取個別名叫 s,表 station 中不包含   字段 id=13 或者 14  的,并且 id 不等于 4 的   查詢出來,只顯示 id SELECT s.id from station s WHERE id in (13,14) and id not in (4); --  從表  Persons  選取  LastName  列的數據  SELECT LastName FROM Persons --  從表  users  選取  id=3  的數據,并只拉一條數據 (據說能優化性能) SELECT * FROM users where id=3 limit 1 --  結果集中會自動去重復數據  SELECT DISTINCT Company FROM Orders --  表  Persons  字段  Id_P  等于  Orders  字段  Id_P  的值, --  結果集顯示  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  中英文混合排序最簡單的辦法  -- ci 是  case insensitive,  即  “大小寫不敏感” 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 語句用于修改表中的數據。

語法:UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

-- update 語句設置字段值為另一個結果取出來的字段  update user set name = (select name from user1 where user1 .id = 1 ) where id = (select id from user2 where user2 .name= 小蘇  --  更新表  orders  中  id=1  的那一行數據更新它的  title  字段  UPDATE `orders` set title= 這里是標題  WHERE id=1;

3、INSERT

INSERT INTO 語句用于向表格中插入新的行。

語法:INSERT INTO 表名稱 VALUES (值 1, 值 2,….)

語法: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 實現將一個表的數據插入到另外一個表的代碼  --  如果只希望導入指定字段,可以用這種方法: -- INSERT INTO  目標表  ( 字段 1,  字段 2, ...) SELECT  字段 1,  字段 2, ... FROM  來源表; INSERT INTO orders (user_account_id, title) SELECT m.user_id, m.title FROM meeting m where m.id=1; --  向表  charger  插入一條數據,已存在就對表  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 語句用于刪除表中的行。

語法: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 的兩條數據  DELETE from meeting where id in (2,3);

5、WHERE

WHERE 子句用于規定選擇的標準。

語法:SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值

--  從表  Persons  中選出  Year  字段大于  1965  的數據  SELECT * FROM Persons WHERE Year 1965

六、操作符

1、AND 和 OR

AND – 如果第一個條件和第二個條件都成立;

OR – 如果第一個條件和第二個條件中只要有一個成立;

1.1、AND

--  刪除  meeting  表字段  -- id=2  并且  user_id=5  的數據   和  -- id=3  并且  user_id=6  的數據  DELETE from meeting where id in (2,3) and user_id in (5,6); --  使用  AND  來顯示所有姓為   Carter   并且名為   Thomas   的人: SELECT * FROM Persons WHERE FirstName= Thomas  AND LastName= Carter

1.2、OR

--  使用  OR  來顯示所有姓為   Carter   或者名為   Thomas   的人: SELECT * FROM Persons WHERE firstname= Thomas  OR lastname= Carter

2、ORDER BY

語句默認按照升序對記錄進行排序。

ORDER BY – 語句用于根據指定的列對結果集進行排序。

DESC – 按照降序對記錄進行排序。

ASC – 按照順序對記錄進行排序。

-- Company 在表 Orders 中為字母,則會以字母順序顯示公司名稱  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 – 操作符允許我們在 WHERE 子句中規定多個值。

IN – 操作符用來指定范圍,范圍中的每一條,都進行匹配。IN 取值規律,由逗號分割,全部放置括號中。語法:SELECT 字段名 FROM 表格名 WHERE 字段名 IN (值一 , 值二 , …);

--  從表  Persons  選取   字段  LastName  等于  Adams、Carter SELECT * FROM Persons WHERE LastName IN (Adams , Carter)

4、NOT

NOT – 操作符總是與其他操作符一起使用,用在要過濾的前面。

SELECT vend_id, prod_name FROM Products WHERE NOT vend_id =  DLL01  ORDER BY prod_name;

5、UNION

UNION – 操作符用于合并兩個或多個 SELECT 語句的結果集。

--  列出所有在中國表(Employees_China)和美國(Employees_USA)的不同的雇員名  SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA --  列出  meeting  表中的  pic_url, -- station  表中的  number_station  別名設置成  pic_url  避免字段不一樣報錯  --  按更新時間排序  SELECT id,pic_url FROM meeting UNION ALL SELECT id,number_station AS pic_url FROM station ORDER BY update_at; --  通過  UNION  語法同時查詢了  products  表   和  comments  表的總記錄數,并且按照  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 – 可理解為:用作、當成,作為;別名

一般是重命名列名或者表名。

語法:select column_1 as 列 1,column_2 as 列 2 from table as 表

SELECT * FROM Employee AS emp --  這句意思是查找所有 Employee  表里面的數據,并把 Employee 表格命名為  emp。 --  當你命名一個表之后,你可以在下面用  emp  代替  Employee. --  例如  SELECT * FROM emp. SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders --  列出表  Orders  字段  OrderPrice  列最大值, --  結果集列不顯示  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 --  結果集只顯示 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

用于根據兩個或多個表中的列之間的關系,從這些表中查詢數據。

JOIN: 如果表中有至少一個匹配,則返回行

INNER JOIN: 在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。

LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行

RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行

FULL JOIN: 只要其中一個表中存在匹配,就返回行 (MySQL 是不支持的,通過 LEFT JOIN + UNION + RIGHT JOIN 的方式 來實現)

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName;

七、SQL 函數

1、COUNT

COUNT 讓我們能夠數出在表格中有多少筆資料被選出來。

語法:SELECT COUNT(字段名) FROM 表格名

--  表  Store_Information  有幾筆  store_name  欄不是空白的資料。 --  IS NOT NULL   是   這個欄位不是空白   的意思。 SELECT COUNT (Store_Name) FROM Store_Information WHERE Store_Name IS NOT NULL; --  獲取  Persons  表的總數  SELECT COUNT(1) AS totals FROM Persons; --  獲取表  station  字段  user_id  相同的總數  select user_id, count(*) as totals from station group by user_id;

2、MAX

MAX 函數返回一列中的最大值。NULL 值不包括在計算中。

語法:SELECT MAX(字段名) FROM 表格名

--  列出表  Orders  字段  OrderPrice  列最大值, --  結果集列不顯示  OrderPrice  顯示  LargestOrderPrice SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders

3、round

ROUND 函數用于把數值字段舍入為指定的小數位數。

語法:SELECT ROUND(column_name,decimals) FROM table_name

-- 列出名稱和價格舍入為最接近的整數  SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products

4、format

FORMAT 函數用于對字段的顯示進行格式化。

語法:SELECT FORMAT(column_name,format) FROM table_name

-- 顯示每天日期所對應的名稱和價格(日期的顯示格式是   YYYY-MM-DD) SELECT ProductName, UnitPrice, FORMAT(Now(), YYYY-MM-DD ) as PerDate FROM Products

5、ucase

UCASE 函數把字段的值轉換為大寫。

語法:SELECT UCASE(column_name) FROM table_name

-- 選取   LastName   和   FirstName   列的內容,然后把   LastName   列轉換為大寫。 SELECT UCASE(LastName) as LastName,FirstName FROM Persons

6、lcase

LCASE 函數把字段的值轉換為小寫。

語法:SELECT LCASE(column_name) FROM table_name

-- 選取   LastName   和   FirstName   列的內容,然后把   LastName   列轉換為小寫  SELECT LCASE(LastName) as LastName,FirstName FROM Persons

八、觸發器

語法: create trigger 觸發器名稱 {before | after} # 之前或者之后出發 insert |  update | delete # 指明了激活觸發程序的語句的類型 on 表名 # 操作哪張表 for each row #   觸發器的執行間隔,for each row 通知觸發器每隔一行執行一次動作,而不是對整個表執行一次。觸發器 SQL 語句

delimiter $ CREATE TRIGGER set_userdate BEFORE INSERT on `message` for EACH ROW BEGIN set @statu = new.status; --  聲明復制變量  statu if @statu = 0 then --  判斷  statu  是否等于  0 UPDATE `user_accounts` SET status=1 WHERE openid=NEW.openid; end if; END $ DELIMITER ; --  恢復結束符號 

OLD 和 NEW 不區分大小寫

NEW 用 NEW.col_name,沒有舊行。在 DELETE 觸發程序中,僅能使用 OLD.col_name,沒有新行。

OLD 用 OLD.col_name 來引用更新前的某一行的列

九、添加索引

1、普通索引 (INDEX)

語法:ALTER TABLE 表名字 ADD INDEX 索引名字 (字段名字)

--  ndash; 直接創建索引  CREATE INDEX index_user ON user(title) --  ndash; 修改表結構的方式添加索引  ALTER TABLE table_name ADD INDEX index_name ON (column(length)) --  給  user  表中的  name  字段   添加普通索引 (INDEX) ALTER TABLE `user` ADD INDEX index_name (name) --  ndash; 創建表的時候同時創建索引  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)

語法:ALTER TABLE 表名字 ADD PRIMARY KEY (字段名字)

--  給  user  表中的  id 字段   添加主鍵索引 (PRIMARY key) ALTER TABLE `user` ADD PRIMARY key (id);

3、唯一索引 (UNIQUE)

語法:ALTER TABLE 表名字 ADD UNIQUE (字段名字)

--  給  user  表中的  creattime  字段添加唯一索引 (UNIQUE) ALTER TABLE `user` ADD UNIQUE (creattime);

4、全文索引 (FULLTEXT)

語法:ALTER TABLE 表名字 ADD FULLTEXT (字段名字)

--  給  user  表中的  description  字段添加全文索引 (FULLTEXT) ALTER TABLE `user` ADD FULLTEXT (description);

5、添加多列索引

語法: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、建立索引的時機

在 WHERE 和 JOIN 中出現的列需要建立索引,但也不完全如此:

MySQL 只對,=,=,,=,BETWEEN,IN 使用索引

某些時候的 LIKE 也會使用索引。

在 LIKE 以通配符 % 和_開頭作查詢時,MySQL 不會使用索引。

--  此時就需要對 city 和 age 建立索引, --  由于 mytable 表的 userame 也出現在了 JOIN 子句中,也有對它建立索引的必要。 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%  --  而下句就不會使用: SELECT * FROM mytable WHERE Name like %admin  --  因此,在使用 LIKE 時應注意以上的區別。

十、創建后表的修改

1、添加列

語法:alter table 表名 add 列名 列數據類型 [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、修改列

語法:alter table 表名 change 列名稱 列新名稱 新數據類型;

--  將表  tel  列改名為  telphone: alter table students change tel telphone char(13) default  -  --  將  name  列的數據類型改為  char(16): alter table students change name name char(16) not null; --  修改  COMMENT  前面必須得有類型屬性  alter table students change name name char(16) COMMENT  這里是名字  --  修改列屬性的時候   建議使用 modify, 不需要重建表  -- change 用于修改列名字,這個需要重建表  alter table meeting modify `weeks` varchar(20) NOT NULL DEFAULT   COMMENT  開放日期   周一到周日:0~6,間隔用英文逗號隔開  -- `user` 表的 `id` 列,修改成字符串類型長度 50,不能為空,`FIRST` 放在第一列的位置  alter table `user` modify COLUMN `id` varchar(50) NOT NULL FIRST ;

3、刪除列

語法:alter table 表名 drop 列名稱;

--  刪除表 students 中的  birthday  列: alter table students drop birthday;

4、重命名表

語法:alter table 表名 rename 新表名;

--  重命名  students  表為  workmates: alter table students rename workmates;

5、清空表數據

方法一:delete from 表名; 方法二:truncate table 表名

DELETE:1. DML 語言;2. 可以回退;3. 可以有條件的刪除;

TRUNCATE:1. DDL 語言;2. 無法回退;3. 默認所有的表內容都刪除;4. 刪除速度比 delete 快。

--  清空表為  workmates  里面的數據,不刪除表。 delete from workmates; --  刪除 workmates 表中的所有數據,且無法恢復  truncate table workmates;

6、刪除整張表

語法:drop table 表名;

--  刪除  workmates  表: drop table workmates;

7、刪除整個數據庫

語法:drop database 數據庫名;

--  刪除  samp_db  數據庫: drop database samp_db;

十一、其它

1、SQL 刪除重復記錄

--  查找表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷  select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId)   1) --  刪除表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷,只留有 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) --  查找表中多余的重復記錄(多個字段) select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*)   1) --  刪除表中多余的重復記錄(多個字段),只留有 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) --  查找表中多余的重復記錄(多個字段),不包含 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 入門基礎知識點有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-17發表,共計12673字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 昌江| 金沙县| 威信县| 革吉县| 绍兴市| 武城县| 都安| 五莲县| 岳阳市| 中方县| 庆云县| 遂川县| 清苑县| 江达县| 巢湖市| 古蔺县| 康平县| 岚皋县| 额尔古纳市| 房产| 莱阳市| 陆良县| 尖扎县| 阜南县| 浦城县| 东至县| 南漳县| 龙门县| 攀枝花市| 九龙县| 宜阳县| 竹山县| 炎陵县| 漠河县| 邮箱| 堆龙德庆县| 江北区| 罗定市| 曲沃县| 灵武市| 富锦市|