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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库之mysql

發布時間:2025/4/14 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库之mysql 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

準備

  ubantu系統,navicat for mysql軟件

引言

  mysql是基于c/s通信架構設計的,用戶通過客戶端和服務器端進行交互,服務器端對數據庫進行操作。簡單地來說,我們把sql語句傳達給客戶端,客戶端把sql語句翻譯成服務器端可以理解和可以執行的指令,服務器端按照這些指令對數據庫進行查詢操作,把操作結果傳給客戶端,客戶端再把結果翻譯成用戶也就是我們可以看懂的內容。c/s架構的好處之一就是用戶不需要和服務器端打交道,也就是意味著用戶不需要學習復雜的服務器端命令,只需要學習簡單的sql語句以及客戶端命令即可,客戶端會幫我們進行指令的翻譯等工作。mysql的c/s架構是一個服務器端可對應多個客戶端,對于mysql怎么區分不同用戶這里暫不需要了解。

  mysql是關系型數據庫的一種,所以我們在設計數據庫的時候一定要抓住實物之間的關系。我們以后設計網站的時候,不同的業務板塊都應該有一個單獨的架構或者數據庫,我們可以把單獨的板塊理解為單獨的網站。

安裝mysql

  命令:sudo apt install mysql-server

配置mysql

  修改/etc/mysql/my.cnf文件,在文件末尾加上下述幾條語句([]表示組)

  [client]

  default-character-set = utf8 ? ? ? ? ? # 指定客戶端編碼,因為默認的latin1不支持中文,所以我們在這里選擇utf8

?

  [mysqld]

  character-set-server = utf8 ? ? ? ? ? ?# 指定服務器端編碼,通常設定為與客戶端編碼一致

  collation-server = utf8_general_ci ? ? ? ? # 同一種編碼也有不同的排序規則

  bind_address = 0.0.0.0 ? ? ? ? ? ? ? ? ? ? # 第一層守護,監聽所有IP

  配置文件更改時應該先做備份,更改完成之后需要重新啟動來重新讀取配置文件

  設置完成后查看編碼信息與排序信息

  • SHOW VARIABLES LIKE '%char%';
  • SHOW VARIABLES LIKE '%colla%'; ? ? ??
  • 啟動mysql

      命令:sudo service mysql restart 或者 ?sudo systemctl restart mysql

      注意:mysql的服務進程名是mysql,所以命令不是sudo service mysqld restart,我們通常不是直接使用mysqld的程序名來啟動程序,因為這個程序可能需要一些復雜的參數,我們借助systemctl 與 service 可以輕松處理相關命令

    navicat連接mysql

      mysql客戶端輸入下述三條命令:

  • CREATE USER 'jack'@'%' IDENTIFIED BY '123456' ? # jack是用戶名,%是任意主機,123456是密碼

  • GRANT ALL ON *.* TO 'jack'@'%'
  • FLUSH PRIVILEGES
  •   也可以直接用下面兩條命令:

  • grant all on 數據庫.* to 用戶名@登錄主機 identified by "密碼"
  • flush PRIVILEGES
  • 建庫

      查看已有數據庫:SHOW DATABASES;

      創建數據庫: CREATE DATABASE `test` charset utf8(character set utf8);

      查看數據庫創建過程: SHOW CREATE DATABASE `test`;

      刪除數據庫:DROP DATABASE `test`

      修改數據庫編碼:ALTER DATABASE `test` charset utf8

      查看數據庫版本號:status/select version()

    備份與還原數據庫

  • 備份整個數據庫 ? mysqldump -uroot -p123456 database>new_database.sql
  • 備份數據庫某張表 ? mysqldump -uroot -p123456 database table>new_table.sql
  • 還原數據庫 ? mysqldump -uroot -p123456 database<new_database.sql ? ? ? ? ? ? ? ?# 恢復時數據庫必須存在,可以是空數據庫
  • 還原數據庫表 ?登錄進入數據庫,然后USE選定數據庫,用source導入 ? ? ? ? ? ? ? ? ? ? ? ??
  • 建表

      數據庫中的表在用戶層相當于二維的excel表格

      查看表的創建過程:SHOW CREATE TABLE `mysql`.`user`;

      創建表:CREATE TABLE `test`.`user`(column1 type1 option, colum2 type2 option);

      查看數據庫表(已選定數據庫情況下):SHOW TABLES;

      移動并重名數據庫表:RENAME TABLE `python`.`user` TO `test`.`user`

      刪除表:DROP TABLE `test`

      注:

    •  創建表的最后一行不要加逗號;排序 collate=utf8_general_ci不區分大小寫,查詢快 ?collate=utf8_genaral_bin區 ? ?分大小寫,排序速度慢;每個表度需要一個primary key(主鍵唯一且為非空);char()分配固定長度, ? ?varchar()是最大長度可變的,性能相對較差
    •  數據庫引擎:1、myisam ? 非事務型,查詢快 ?2、innodb ? 事務型,修改快,默認引擎(功能強大)
    •  數據庫表、列和數據庫一樣,可以單獨地設置字符集與排序規則
    •  不指定列的default時默認會default null。
    •  關于字符集編碼如果不指定就存在繼承現象:列尋找表的編碼,表尋找庫的編碼,庫尋找配置文件編碼
    •  數據庫的每一個字段都必須有固定類型
    •  mysql的其中一個規則是名字(字段名也是名字)要加反引號
    • ? ?\c ?取消命令(cancle) ? ?\G?把列數據逐行顯示
    • ? ?主鍵唯一且非空,但是唯一且非空不一定是主鍵
    • ? ?建表有個套路就是用沒有實際含義的id當作主鍵
    • ? ?注冊的時候哪些字段可以為空,哪些可以為空根據實際需求來定
    • ? ?AUTO_INCREMENT 需要和INT結合使用,有了AUTO_INCREMENT可以不指定id進行插入
    • ? ?只有ALTER、RENAME、CREATE等關鍵字要接DATABASE 以及TABLE
    • ? ?實體之間的關系分為三種:一對一;一對多;多對多。區分這三種關系可以通過畫圖來說明。
    • ? ?一對多:使用外鍵約束來實現
    • ? ?一對一:使用外鍵 + UNIQUE KEY來實現
    • ? ?多對多:使用外鍵 + 第三方表來實現
    1 CREATE TABLE `users` ( 2 `id` int PRIMARY KEY AUTO_INCREMENT, 3 `email` char(50) UNIQUE KEY NOT NULL, 4 `user_name` varchar(20) NOT NULL, 5 `telphone` char(11) 6 ); 7 8 CREATE TABLE `sellers` ( 9 `id` int PRIMARY KEY AUTO_INCREMENT, 10 `user_id` int UNIQUE KEY NOT NULL, 11 FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) 12 ); 13 14 CREATE TABLE `houses` ( 15 `id` int PRIMARY KEY AUTO_INCREMENT, 16 `summary` varchar(100) NOT NULL, 17 `seller_id` int NOT NULL, 18 FOREIGN KEY (`seller_id`) REFERENCES `seller`(`id`) 19 ); 20 21 CREATE TABLE `sellers_tags`( 22 `sellers_id` int NOT NULL, 23 `tag_id` int NOT NULL, 24 FOREIGN KEY (`sellers_id`) REFERANCES sellers(`id`), 25 FOREIGN KEY (`tag_id`) REFERANCES tags(`id`), 26 UNIQOE KEY(`sellers_id`, `tag_id`) # PRIMARY KEY(`sellers_id`, 27 28 `tag_id`) 29 ); 30 31 CREATE TABLE `tags` ( 32 `id` int PRIMARY KEY AUTO_INCREMENT, 33 `name` varchar(20) UNIQUE KEY NOT NULL 34 ); View Code

    表信息

  • 查看表的創建語句:SHOW CREATE TABLE `mysql`.`user`;
  • 刪除表:DROP TABLE?`mysql`.`user`;
  • 重命名或移動表:RENAME TABLE FROM?`mysql`.`user` TO?`test`.`user`
  • 查看表結構:DESC?`mysql`.`user`;
  • 查看列信息:SHOW COLUMNS FROM ?`mysql`.`user` LIKE Pattern
  • 添加列:ALTER TABLE?`mysql`.`user` ADD COLUMN `gender` enum('M','F'),ADD COLUMN `age` int
  • 刪除列:ALTER TABLE?`mysql`.`user` DROP COLUMN?`gender`(暫不支持刪除多列)
  • 修改現有列的類型和選項:ALTER TABLE?`mysql`.`user` MODIFY `gender` char(1) default 1; ? ? 注:一旦修改的列已經存在了違反約束的數據,那么修改失敗
  • 完全修改列信息: ALTER TABLE?`mysql`.`user` CHANGE `gender` `sex` enum('M', 'F') ?注:無法只修改列名字。如果只想修改名字,那么請帶上原來的列類型和選項
  • 數據類型

      MySQL支持多種數據類型,主要有數值類型、日期/時間類型和字符串類型。

  • 數值數據類型:包括整數類型TINYINT(1byte)、SMALLINT(2bytes)、MEDIUMINT(3bytes)、INT(4bytes)、BIGINT(8bytes)、浮點小數數據類型FLOAT(4bytes)和DOUBLE(8bytes)、定點小數類型DECIMAL。# 默認是有符號的。參數是可以顯示的最大位數
  • 日期/時間類型:包括YEAR(1byte)、TIME(3bytes)、DATE(3bytes)、DATETIME(8bytes)和TIMESTAMP(4bytes)
  • 字符串類型:包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等
  •   YEAR的日期格式是YYYY, TIME的日期格式是HH:MM:SS, DATE的日期格式是YYYY-MM-DD, DATETIME的日期格式是YYYY-MM-DD HH:MM:SS,TIMESTAMP的日期格式是YYYY-MM-DD HH:MM:SS。

      字符串類型括號里的參數意義就是字節數

    鍵和索引

      mysql中可以把鍵就理解為索引,索引就是為某些列,花費額外的空間,來維持一個高效的數據結構,加快查找速度。注:加速只對指定的列有效

      功能鍵(約束鍵):1、主鍵 ? ? 2、唯一鍵 ? ? ?3、外鍵

    ?  ?非功能鍵(索引)

  • 添加索引 ? ALTER TABLE?`mysql`.`user` ADD INDEX(`age`)
  • 刪除索引 ? ALTER TABLE?`mysql`.`user` DROP index `age`
  • 記錄(行)之增加

  • 普通插入: INSERT INTO `users` VALUES (); ? ? ? ? ? ? ? ? # 默認為空的也必須插入,否則這條語句語法就無法通過
  • 指定列插入:INSERT INTO ?`users` ?() VALUES () ? ? ? ? ? ? ? ? ? ? ? ? #?插入指定數據需要知道哪些不需要指定值
  • 一次插入多行:INSERT INTO?`users` VALUES (),()
  • 記錄(行)之刪除

  • 清空表:DELETE FROM?`users` WHERE 1
  • 刪除指定行:DELETE FROM?`users` WHERE pattern
  •   注:通常在刪除之前,我們要注意我們的WHERE,同時,我們建議在刪除前,使用相同的WHERE的SELECT先查詢一遍

    記錄(行)之改

      UPDATE?`users` SET `name`='jack' WHERE pattern

      注:通常在刪除之前,我們要注意我們的WHERE,同時,我們建議在刪除前,使用相同的WHERE的SELECT先查詢一遍

    記錄(行)之查

  • 完整查詢: ?SELECT * FROM `users` WHERE 1
  • 指定列查詢: SELECT Column1,Column2 FROM?`users` WHERE 1
  • 指定行查詢: SELECT * FROM `users` WHERE pattern
  • 查詢排序:SELECT * FROM `users` WHERE pattern ORDER BY `u_id` `name` DESC
  • 分組查詢:SELECT `gender`,COUNT(*) AS num FROM WHERE 1 GROUP BY `gender`
  •   注:分組查詢只有和聚合函數結合使用才有意義

    多表查詢

    •  內聯接(交叉連接)

        SELECT `s_name`, `c_flower`? FROM `classes`? ?INNER JOIN `students`?ON `students`.`c_id` = `classes`.`c_id`?WHERE `students`.`c_id` = 9;

        注:on是連接條件,where是篩選條件。也就是說,ON用來連接出有意義數據行的條件,WHERE是已經連接了以后,再篩選出當時有需要的數據

    •  外連接(左連接與右連接)

        SELECT * FROM?FROM?`classes`? ?LEFT?JOIN?`students`?ON?`students`.`c_id`?=?`classes`.`c_id`

        注:左連接以左表為基準,右連接以右表為基準。區別于內連接的是外連接必須要用ON連接條件

    ?

      

    ?    

    ?

      

      

      

    ?

    ?

    ?

    ?

      

    轉載于:https://www.cnblogs.com/longyunfeigu/p/6753061.html

    總結

    以上是生活随笔為你收集整理的数据库之mysql的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。