日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL庫表名大小寫的選擇

瀏覽:32日期:2023-10-02 09:21:56
目錄1.決定大小寫是否敏感的參數2.參數變更注意事項總結:1.決定大小寫是否敏感的參數

在 MySQL 中,數據庫與 data 目錄中的目錄相對應。數據庫中的每個表都對應于數據庫目錄中的至少一個文件(可能是多個文件,具體取決于存儲引擎)。因此,操作系統的大小寫是否敏感決定了數據庫大小寫是否敏感,而 Windows 系統是對大小寫不敏感的,Linux 系統對大小寫敏感。

默認情況下,庫表名在 Windows 系統下是不區分大小寫的,而在 Linux 系統下是區分大小寫的。列名,索引名,存儲過程、函數及事件名稱在任何操作系統下都不區分大小寫,列別名也不區分大小寫。

除此之外,MySQL 還提供了 lower_case_table_names 系統變量,該參數會影響表和數據庫名稱在磁盤上的存儲方式以及在 MySQL 中的使用方式,在 Linux 系統,該參數默認為 0 ,在 Windows 系統,默認值為 1 ,在 macOS 系統,默認值為 2 。下面再來看下各個值的具體含義:

Value

Meaning

0

庫表名以創建語句中指定的字母大小寫存儲在磁盤上,名稱比較區分大小寫。

1

庫表名以小寫形式存儲在磁盤上,名稱比較不區分大小寫。MySQL 在存儲和查找時將所有表名轉換為小寫。此行為也適用于數據庫名稱和表別名。

2

庫表名以創建語句中指定的字母大小寫存儲在磁盤上,但是 MySQL 在查找時將它們轉換為小寫。名稱比較不區分大小寫。

一般很少將 lower_case_table_names 參數設置為 2 ,下面僅討論設為 0 或 1 的情況。Linux 系統下默認為 0 即區分大小寫,我們來看下 lower_case_table_names 為 0 時數據庫的具體表現:

# 查看參數設置mysql> show variables like ’lower_case_table_names’;+------------------------+-------+| Variable_name | Value |+------------------------+-------+| lower_case_table_names | 0 |+------------------------+-------+# 創建數據庫mysql> create database TestDb;Query OK, 1 row affected (0.01 sec)mysql> create database testdb;Query OK, 1 row affected (0.02 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || TestDb || mysql || performance_schema || sys|| testdb |+--------------------+mysql> use testdb;Database changedmysql> use TestDb;Database changedmysql> use TESTDB;ERROR 1049 (42000): Unknown database ’TESTDB’# 創建表mysql> CREATE TABLE if not exists `test_tb` ( -> `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT ’自增主鍵’, -> `stu_id` int(11) NOT NULL COMMENT ’學號’, -> `stu_name` varchar(20) DEFAULT NULL COMMENT ’學生姓名’, -> PRIMARY KEY (`increment_id`), -> UNIQUE KEY `uk_stu_id` (`stu_id`) USING BTREE -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’test_tb’;Query OK, 0 rows affected (0.06 sec)mysql> CREATE TABLE if not exists `Student_Info` ( -> `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT ’自增主鍵’, -> `Stu_id` int(11) NOT NULL COMMENT ’學號’, -> `Stu_name` varchar(20) DEFAULT NULL COMMENT ’學生姓名’, -> PRIMARY KEY (`increment_id`), -> UNIQUE KEY `uk_stu_id` (`Stu_id`) USING BTREE -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’Student_Info’;Query OK, 0 rows affected (0.06 sec)mysql> show tables;+------------------+| Tables_in_testdb |+------------------+| Student_Info || test_tb |+------------------+# 查詢表mysql> select Stu_id,Stu_name from test_tb limit 1;+--------+----------+| Stu_id | Stu_name |+--------+----------+| 1001 | from1 |+--------+----------+1 row in set (0.00 sec)mysql> select stu_id,stu_name from test_tb limit 1;+--------+----------+| stu_id | stu_name |+--------+----------+| 1001 | from1 |+--------+----------+mysql> select stu_id,stu_name from Test_tb;ERROR 1146 (42S02): Table ’testdb.Test_tb’ doesn’t existmysql> select Stu_id,Stu_name from test_tb as A where A.Stu_id = 1001; +--------+----------+| Stu_id | Stu_name |+--------+----------+| 1001 | from1 |+--------+----------+1 row in set (0.00 sec)mysql> select Stu_id,Stu_name from test_tb as A where a.Stu_id = 1001;ERROR 1054 (42S22): Unknown column ’a.Stu_id’ in ’where clause’# 查看磁盤上的目錄及文件[root@localhost ~]#:/var/lib/mysql# ls -lhtotal 616Mdrwxr-x--- 2 mysql mysql 20 Jun 3 14:25 TestDb...drwxr-x--- 2 mysql mysql 144 Jun 3 14:40 testdb[root@localhost ~]#:/var/lib/mysql# cd testdb/[root@localhost ~]#:/var/lib/mysql/testdb# ls -lhtotal 376K-rw-r----- 1 mysql mysql 8.6K Jun 3 14:33 Student_Info.frm-rw-r----- 1 mysql mysql 112K Jun 3 14:33 Student_Info.ibd-rw-r----- 1 mysql mysql 8.6K Jun 3 14:40 TEST_TB.frm-rw-r----- 1 mysql mysql 112K Jun 3 14:40 TEST_TB.ibd-rw-r----- 1 mysql mysql 67 Jun 3 14:25 db.opt-rw-r----- 1 mysql mysql 8.6K Jun 3 14:30 test_tb.frm-rw-r----- 1 mysql mysql 112K Jun 3 14:30 test_tb.ibd

通過以上實驗我們發現 lower_case_table_names 參數設為 0 時,MySQL 庫表名是嚴格區分大小寫的,而且表別名同樣區分大小寫但列名不區分大小寫,查詢時也需要嚴格按照大小寫來書寫。同時我們注意到,允許創建名稱同樣但大小寫不一樣的庫表名(比如允許 TestDb 和 testdb 庫共存)。

你有沒有考慮過 lower_case_table_names 設為 0 會出現哪些可能的問題,比如說:一位同事創建了 Test 表,另一位同事在寫程序調用時寫成了 test 表,則會報錯不存在,更甚者可能會出現 TestDb 庫與 testdb 庫共存,Test 表與 test 表共存的情況,這樣就更加混亂了。所以為了實現最大的可移植性和易用性,我們可以采用一致的約定,例如始終使用小寫名稱創建和引用庫表。也可以將 lower_case_table_names 設為 1 來解決此問題,我們來看下此參數為 1 時的情況:

# 將上述測試庫刪除 并將 lower_case_table_names 改為 1 然后重啟數據庫mysql> show variables like ’lower_case_table_names’;+------------------------+-------+| Variable_name | Value |+------------------------+-------+| lower_case_table_names | 1 |+------------------------+-------+# 創建數據庫mysql> create database TestDb;Query OK, 1 row affected (0.02 sec)mysql> create database testdb;ERROR 1007 (HY000): Can’t create database ’testdb’; database existsmysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys|| testdb |+--------------------+7 rows in set (0.00 sec)mysql> use testdb;Database changedmysql> use TESTDB;Database changed# 創建表mysql> CREATE TABLE if not exists `test_tb` ( -> `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT ’自增主鍵’, -> `stu_id` int(11) NOT NULL COMMENT ’學號’, -> `stu_name` varchar(20) DEFAULT NULL COMMENT ’學生姓名’, -> PRIMARY KEY (`increment_id`), -> UNIQUE KEY `uk_stu_id` (`stu_id`) USING BTREE -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’test_tb’;Query OK, 0 rows affected (0.05 sec)mysql> create table TEST_TB (id int);ERROR 1050 (42S01): Table ’test_tb’ already existsmysql> show tables;+------------------+| Tables_in_testdb |+------------------+| test_tb |+------------------+# 查詢表mysql> select stu_id,stu_name from test_tb limit 1;+--------+----------+| stu_id | stu_name |+--------+----------+| 1001 | from1 |+--------+----------+1 row in set (0.00 sec)mysql> select stu_id,stu_name from Test_Tb limit 1; +--------+----------+| stu_id | stu_name |+--------+----------+| 1001 | from1 |+--------+----------+1 row in set (0.00 sec)mysql> select stu_id,stu_name from test_tb as A where a.stu_id = 1002;+--------+----------+| stu_id | stu_name |+--------+----------+| 1002 | dfsfd |+--------+----------+1 row in set (0.00 sec)

當 lower_case_table_names 參數設為 1 時,可以看出庫表名統一用小寫存儲,查詢時不區分大小寫且用大小寫字母都可以查到。這樣會更易用些,程序里無論使用大寫表名還是小寫表名都可以查到這張表,而且不同系統間數據庫遷移也更方便,這也是建議將 lower_case_table_names 參數設為 1 的原因。

2.參數變更注意事項

lower_case_table_names 參數是全局系統變量,不可以動態修改,想要變動時,必須寫入配置文件然后重啟數據庫生效。如果你的數據庫該參數一開始為 0 ,現在想要改為 1 ,這種情況要格外注意,因為若原實例中存在大寫的庫表,則改為 1 重啟后,這些庫表將會不能訪問。如果需要將 lower_case_table_names 參數從 0 改成 1 ,可以按照下面步驟修改:

首先核實下實例中是否存在大寫的庫及表,若不存在大寫的庫表,則可以直接修改配置文件然后重啟。若存在大寫的庫表,則需要先將大寫的庫表轉化為小寫,然后才可以修改配置文件重啟。

當實例中存在大寫庫表時,可以采用下面兩種方法將其改為小寫:

1、通過 mysqldump 備份相關庫,備份完成后刪除對應庫,之后修改配置文件重啟,最后將備份文件重新導入。此方法用時較長,一般很少用到。

2、通過 rename 語句修改,具體可以參考下面 SQL:

# 將大寫表重命名為小寫表 rename table TEST to test;# 若存在大寫庫 則需要先創建小寫庫 然后將大寫庫里面的表轉移到小寫庫rename table TESTDB.test_tb to testdb.test_tb;# 分享兩條可能用到的SQL# 查詢實例中有大寫字母的表SELECT TABLE_SCHEMA, TABLE_NAMEFROM information_schema.`TABLES` WHERE TABLE_SCHEMA NOT IN ( ’information_schema’, ’sys’, ’mysql’, ’performance_schema’ ) AND table_type = ’BASE TABLE’ AND TABLE_NAME REGEXP BINARY ’[A-Z]’ # 拼接SQL 將大寫庫中的表轉移到小寫庫SELECT CONCAT( ’rename table TESTDB.’, TABLE_NAME, ’ to testdb.’, TABLE_NAME, ’;’ ) FROM information_schema.TABLES WHERE TABLE_SCHEMA = ’TESTDB’;總結:

本篇文章主要介紹了 MySQL 庫表大小寫問題,相信你看了這篇文章后,應該明白為什么庫表名建議使用小寫英文了。如果你想變更 lower_case_table_names 參數,也可以參考下本篇文章哦。

以上就是MySQL庫表名大小寫的選擇的詳細內容,更多關于MySQL庫表名大小寫的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
**爰片久久毛片| 亚洲一区二区网站| 日韩国产欧美在线视频| 日韩**一区毛片| 国产免费av一区二区三区| 精品视频高潮| 亚洲成av在线| 国产精品试看| 日本va欧美va精品发布| 91成人在线| 国产精品99一区二区三| 精品中文一区| 日韩精品视频中文字幕| 久久午夜影院| 欧美日韩在线观看视频小说| 午夜在线精品偷拍| 国产免费久久| 99精品美女| 日韩午夜免费| 久久久男人天堂| 99精品视频在线观看免费播放| 黑丝一区二区三区| 日韩中文字幕一区二区高清99| 欧美日韩一区二区三区不卡视频 | 精品美女久久| 99久久婷婷这里只有精品| 亚洲精品福利| 9999国产精品| 中文字幕中文字幕精品| 精品一区二区三区在线观看视频| 香蕉久久99| 中文字幕一区二区三区在线视频| 久久香蕉网站| 精品日本视频| 国产精品久久久久av蜜臀| 欧美激情精品| 免费精品国产的网站免费观看| 三级在线观看一区二区| 精品亚洲a∨| 午夜在线一区| 亚洲黄色免费看| 免播放器亚洲| 欧美日韩调教| 91tv亚洲精品香蕉国产一区| 久久精品青草| 亚洲香蕉久久| 精品国产欧美| 中文字幕成人| 日本久久综合| 日韩大片免费观看| 最新日韩欧美| 欧美日韩在线精品一区二区三区激情综合| 国产一区二区三区日韩精品 | 日韩精品欧美精品| 欧美日韩亚洲在线观看| 久久丁香四色| 视频一区国产视频| 日韩欧美综合| 日韩高清一区二区| 亚洲国产一区二区三区在线播放| 国产精品亚洲欧美日韩一区在线 | 国产美女视频一区二区| 亚洲一级少妇| 欧美三级第一页| 午夜欧美视频| 国产一区2区| 欧美中文一区| 国产精品美女久久久| 国产传媒在线| 国产精品亚洲综合在线观看| 一区二区精彩视频| 91久久久精品国产| 成人一区不卡| 国产精品一区二区av交换| 亚州国产精品| 久久都是精品| 蜜桃国内精品久久久久软件9| 国产精品xx| 国产精品17p| 日本亚洲最大的色成网站www | 亚洲一区二区三区高清不卡| 久久久久国产精品一区三寸 | 日韩综合在线| 久久精品日韩欧美| 免费在线日韩av| 国产欧美三级| 亚洲精品乱码久久久久久蜜桃麻豆| 黄色成人91| 美女少妇全过程你懂的久久| 91精品推荐| 日本国产精品| 亚洲www免费| 毛片在线网站| 精品视频免费| 精品国产精品国产偷麻豆| 国产极品嫩模在线观看91精品| 91欧美极品| 欧美日韩亚洲一区三区| 久久国产麻豆精品| 久久一区亚洲| 国产一区二区三区四区二区| 国产一区二区三区四区大秀 | 日韩1区在线| 欧美日韩一二| 99热精品在线| 爽好久久久欧美精品| 九一成人免费视频| 99视频在线精品国自产拍免费观看| 亚洲精品123区| 天使萌一区二区三区免费观看| 中文精品在线| 日韩欧美中文字幕电影 | 玖玖玖国产精品| 一区二区高清| 久久国际精品| 国产+成+人+亚洲欧洲在线| 日韩中文在线电影| 欧美午夜不卡| 中文字幕av一区二区三区四区| 石原莉奈在线亚洲二区| 日韩中文字幕一区二区高清99| 国产精品一区二区三区av麻| 91亚洲自偷观看高清| 在线日韩中文| 免费成人在线视频观看| 日本亚洲不卡| 九九久久国产| 九九在线精品| 日韩精品视频中文字幕| 色综合狠狠操| 在线国产一区二区| 日本一区免费网站| 国产aa精品| 午夜亚洲福利在线老司机| 国产精品一区二区三区美女| 九九99久久精品在免费线bt| 久久一区二区三区电影| 蜜臀av在线播放一区二区三区| 国产日韩欧美三区| 成人看片网站| 亚洲五月综合| 国产成人免费av一区二区午夜| 自拍日韩欧美| 欧美91在线|欧美| 91tv亚洲精品香蕉国产一区| 亚洲免费专区| 国产一区二区三区久久| 日韩午夜一区| 精品91福利视频| 蜜桃视频免费观看一区| 日本综合视频| 美女网站视频一区| 日韩激情视频网站| 久久精品1区| 日本aⅴ精品一区二区三区| 日韩成人高清| aa亚洲婷婷| 日韩精品成人在线观看| 日韩在线二区| 国产免费久久| 热久久国产精品| 毛片在线网站| 日韩高清不卡在线| 亚洲香蕉网站| 精品精品久久| 黑丝一区二区三区| 久久久久免费| 日韩av一区二| 亚洲一级影院| 国产精品久久久网站| 免费中文字幕日韩欧美| 国产 日韩 欧美一区| 欧美国产另类| 亚洲精品护士| 99久久99久久精品国产片果冰| 国产精品丝袜在线播放| 老牛影视一区二区三区| 99精品综合| 欧美激情另类| 国产精品一区亚洲| 在线亚洲成人| 激情黄产视频在线免费观看| 国产情侣久久| 亚洲精品激情| 夜夜嗨网站十八久久| 亚洲伊人av| 美女久久99| 国产欧美日韩在线观看视频| 亚洲久久视频| 视频一区视频二区中文| 欧美国产91| 久久精品影视| 欧洲亚洲一区二区三区| 日韩av专区| 国产一区二区三区国产精品| 色8久久久久| 综合色就爱涩涩涩综合婷婷| 亚洲少妇自拍| 久久国产99| 久久高清国产|