執行 sql語句 「show columns from tbname」tbname 是要獲取的表的表名
會得到 一個結果集 包含了欄位名 數據類型 是否可以為空 是否主鍵 默認值 是否自增 等信息 要改足夠使用了
2. MYSQL資料庫索引類型都有哪些
聚集索引:也稱 Clustered Index。是指關系表記錄的物理順序與索引的邏輯順序相同。由於一張表只能按照一種物理順序存放,一張表最多也只能存在一個聚集索引。與非聚集索引相比,聚集索引有著更快的檢索速度。
MySQL 里只有 INNODB 表支持聚集索引,INNODB 表數據本身就是聚集索引,也就是常說 IOT,索引組織表。非葉子節點按照主鍵順序存放,葉子節點存放主鍵以及對應的行記錄。所以對 INNODB 表進行全表順序掃描會非常快。
非聚集索引:也叫 Secondary Index。指的是非葉子節點按照索引的鍵值順序存放,葉子節點存放索引鍵值以及對應的主鍵鍵值。MySQL 里除了 INNODB 表主鍵外,其他的都是二級索引。MYISAM,memory 等引擎的表索引都是非聚集索引。簡單點說,就是索引與行數據分開存儲。一張表可以有多個二級索引。
3. 怎麼使用SQL語句查MySQL資料庫中數據表的字元集類型
查看資料庫的字元集
show variables like 'character\_set\_%';
輸出:
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
+--------------------------+--------+
4. mySQL是什麼類型的資料庫
mysql(發音為"my
ess
cue
el",不是"my
sequel")是一種開放源代碼的關系型資料庫管理系統(rdbms),mysql資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(sql)進行資料庫管理。
由於mysql是開放源代碼的,因此任何人都可以在general
public
license的許可下下載並根據個性化的需要對其進行修改。mysql因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,mysql是管理內容最好的選擇。
mysql關系型資料庫於1998年1月發行第一個版本。它使用系統核心提供的多線程機制提供完全的多線程運行模式,提供了面向c、c++、eiffel、java、perl、php、python以及tcl等編程語言的編程介面(apis),支持多種欄位類型並且提供了完整的操作符支持查詢中的select和where操作。
mysql開發組計劃於2001年中期公布mysql4.0版本。在這個版本中將有以下新的特性被提供:新的表定義文件格式、高性能的數據復制功能、更加強大的全文搜索功能。在此之後,mysql開發著希望提供安全的數據復制機制、在beos操作系統上的mysql實現以及對延時關鍵字的定期刷新選項。隨著時間的推進,mysql將對ansi
92/ansi
99標准完全兼容。
時至今日
mysql
和
php
的結合絕對是完美.很多大型的網站也用到mysql資料庫.mysql的發展前景是非常光明的!
5. mysql資料庫,表的列的,數據類型,如何查看
使用以下命令吧
desc表名
或者
showcreatetable表名;
請採納!
6. mysql資料庫中有幾種數據類型
MySQL數據類型之一字元型
VARCHAR VS CHAR
VARCHAR型和CHAR型數據的這個差別是細微的,但是非常重要。他們都是用來儲存字元串長度小於255的字元。
假如你向一個長度為四十個字元的VARCHAR型欄位中輸入數據Bill Gates。當你以後從這個欄位中取出此數據時,你取出的數據其長度為十個字元——字元串Bill Gates的長度。 現在假如你把字元串輸入一個長度為四十個字元的CHAR型欄位中,那麼當你取出數據時,所取出的數據長度將是四十個字元。字元串的後面會被附加多餘的空格。
當你建立自己的站點時,你會發現使用VARCHAR型欄位要比CHAR型欄位方便的多。使用VARCHAR型欄位時,你不需要為剪掉你數據中多餘的空格而操心。
VARCHAR型欄位的另一個突出的好處是它可以比CHAR型欄位佔用更少的內存和硬碟空間。當你的資料庫很大時,這種內存和磁碟空間的節省會變得非常重要
MySQL數據類型之二文本型
TEXT
使用文本型數據,你可以存放超過二十億個字元的字元串。當你需要存儲大串的字元時,應該使用文本型數據。
注意文本型數據沒有長度,而上一節中所講的字元型數據是有長度的。一個文本型欄位中的數據通常要麼為空,要麼很大。
當你從HTML form的多行文本編輯框(TEXTAREA)中收集數據時,你應該把收集的信息存儲於文本型欄位中。但是,無論何時,只要你能避免使用文本型欄位,你就應該不適用它。文本型欄位既大且慢,濫用文本型欄位會使伺服器速度變慢。文本型欄位還會吃掉大量的磁碟空間。
一旦你向文本型欄位中輸入了任何數據(甚至是空值),就會有2K的空間被自動分配給該數據。除非刪除該記錄,否則你無法收回這部分存儲空間。
MySQL數據類型之三數值型
SQL支持許多種不同的數值型數據。你可以存儲整數 INT 、小數 NUMERIC、和錢數 MONEY。
INT VS SMALLINT VS TINYINT
他們的區別只是字元長度:
INT型數據的表數范圍是從-2,147,483,647到2,147,483,647的整數
SMALLINT 型數據可以存儲從-32768到32768的整數
TINYINT 型的欄位只能存儲從0到255的整數,不能用來儲存負數
通常,為了節省空間,應該盡可能的使用最小的整型數據。一個TINYINT型數據只佔用一個位元組;一個INT型數據佔用四個位元組。這看起來似乎差別不大,但是在比較大的表中,位元組數的增長是很快的。另一方面,一旦你已經創建了一個欄位,要修改它是很困難的。因此,為安全起見,你應該預測以下,一個欄位所需要存儲的數值最大有可能是多大,然後選擇適當的數據類型。
MUNERIC
為了能對欄位所存放的數據有更多的控制,你可以使用NUMERIC型數據來同時表示一個數的整數部分和小數部分。NUMERIC型數據使你能表示非常大的數——比INT型數據要大得多。一個NUMERIC型欄位可以存儲從-1038到1038范圍內的數。NUMERIC型數據還使你能表示有小數部分的數。例如,你可以在NUMERIC型欄位中存儲小數3.14。
當定義一個NUMERIC型欄位時,你需要同時指定整數部分的大小和小數部分的大小。如:MUNERIC(23,0)
一個 NUMERIC型數據的整數部分最大隻能有28位,小數部分的位數必須小於或等於整數部分的位數,小數部分可以是零。
MONEY VS SMALLMONEY
你可以使用 INT型或NUMERIC型數據來存儲錢數。但是,專門有另外兩種數據類型用於此目的。如果你希望你的網點能掙很多錢,你可以使用MONEY型數據。如果你的野心不大,你可以使用SMALLMONEY型數據。MONEY型數據可以存儲從-922,337,203,685,477.5808到922,337,203,685,477.5807的錢數。如果你需要存儲比這還大的金額,你可以使用NUMERIC型數據。
SMALLMONEY型數據只能存儲從-214,748.3648到214,748.3647 的錢數。同樣,如果可以的話,你應該用SMALLMONEY型來代替MONEY型數據,以節省空間。
MySQL數據類型之四邏輯型
BIT
如果你使用復選框( CHECKBOX)從網頁中搜集信息,你可以把此信息存儲在BIT型欄位中。BIT型欄位只能取兩個值:0或1。
當心,在你創建好一個表之後,你不能向表中添加 BIT型欄位。如果你打算在一個表中包含BIT型欄位,你必須在創建表時完成。
MySQL數據類型之五日期型
DATETIME VS SMALLDATETIME
一個 DATETIME型的欄位可以存儲的日期范圍是從1753年1月1日第一毫秒到9999年12月31日最後一毫秒。
如果你不需要覆蓋這么大范圍的日期和時間,你可以使用SMALLDATETIME型數據。它與DATETIME型數據同樣使用,只不過它能表示的日期和時間范圍比DATETIME型數據小,而且不如DATETIME型數據精確。一個SMALLDATETIME型的欄位能夠存儲從1900年1月1日到2079年6月6日的日期,它只能精確到秒。
DATETIME型欄位在你輸入日期和時間之前並不包含實際的數據,認識這一點是重要的。
7. MySQL如何創建資料庫並查詢數據類型
1、//看當前使用的是哪個資料庫,如果你還沒選擇任何資料庫,結果是NULL。
mysql>select database();
+------------+
| DATABASE() |
+------------+
| menagerie |
+------------+2、//查看有哪些資料庫
mysql>show databases;+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3、//選擇資料庫
mysql>usetest;//;號可有可無,必須單行使用.
4、為了找出當前的資料庫包含什麼表(例如,當你不能確定一個表的名字),使用這個命令:5、//看資料庫里有哪些表
mysql>show tables;+---------------------+
| Tables in menagerie |
+---------------------+
| event |
| pet |
+---------------------+
如果你想要知道一個表的結構,可以使用DESCRIBE命令;它顯示表中每個列的信息:6、//看錶里有哪些列
mysql> describe pet;+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| *** | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
Field顯示列名字,Type是列的數據類型,Null表示列是否能包含NULL值,Key顯示列是否被索引而Default指定列的默認值。
如果表有索引,SHOW INDEX FROM tbl_name生成有關索引的信息。
刪除資料庫.
mysql>drop database test;
8. 關於mysql資料庫裡面數據類型number的問題
MySQL 數據類型細分下來,大概有以下幾類:
數值,典型代表為 tinyint,int,bigint
浮點/定點,典型代表為 float,double,decimal 以及相關的同義詞
字元串,典型代表為 char,varchar
時間日期,典型代表為 date,datetime,time,timestamp
二進制,典型代表為 binary,varbinary
位類型
枚舉類型
集合類型
大對象,比如 text,blob
json 文檔類型
一、數值類型(不是數據類型,別看錯了)如果用來存放整數,根據范圍的不同,選擇不同的類型。
注意:timestamp 代表的時間戳是一個 int32 存儲的整數,取值范圍為 '1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999';datetime 取值范圍為 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。
1. 如果時間有可能超過時間戳范圍,優先選擇 datetime。2. 如果需要單獨獲取年份值,比如按照年來分區,按照年來檢索等,最好在表中添加一個 year 類型來參與。3. 如果需要單獨獲取日期或者時間,最好是單獨存放,而不是簡單的用 datetime 或者 timestamp。後面檢索時,再加函數過濾,以免後期增加 SQL 編寫帶來額外消耗。
建立表 t5,對這些可能需要的欄位全部分離開,這樣以後寫 SQL 語句的時候就很容易了。
當然了,這種情形佔用額外的磁碟空間。如果想在易用性與空間佔用量大這兩點來折中,可以用 MySQL 的虛擬列來實時計算。比如假設 c5 欄位不存在,想要得到 c5 的結果。mysql-(ytt/3305)->alter table t5 drop c5, add c5 year generated always as (year(c1)) virtual;Query OK, 1 row affected (2.46 sec)Records: 1 Duplicates: 0 Warnings: 0
五、二進制類型
binary(10)/varbinary(10) 代表的不是字元個數,而是位元組數。
行結束符不一樣。char 的行結束符是 ,binary 的行結束符是 0x00。
由於是二進制存儲,所以字元編碼以及排序規則這類就直接無效了。
六、位類型
1. 對於 bit(8) 如果單純存放 1 位,左邊以 0 填充 00000001。2. 查詢時可以直接十進制來過濾數據。3. 如果此欄位加上索引,MySQL 不會自己做類型轉換,只能用二進制來過濾。
創建表 c1, 欄位性別定義一個比特位。mysql-(ytt/3305)->create table c1(gender bit(1));Query OK, 0 rows affected (0.02 sec)
mysql-(ytt/3305)->select cast(gender as unsigned) 'f1' from c1;+------+| f1 |+------+| 0 || 1 |+------+2 rows in set (0.00 sec)
過濾數據也一樣,二進制或者直接十進制都行。mysql-(ytt/3305)->select conv(gender,16,10) as gender -> from c1 where gender = b'1';+--------+| gender |+--------+| 1|+--------+1 row in set (0.00 sec)mysql-(ytt/3305)->select conv(gender,16,10) as gender -> from c1 where gender = '1';+--------+| gender |+--------+| 1|+--------+1 row in set (0.00 sec)
mysql-(ytt/3305)->create table c2(gender char(0));Query OK, 0 rows affected (0.03 sec)
mysql-(ytt/3305)->select count(*) from c1;+----------+| count(*) |+----------+| 33554432 |+----------+1 row in set (1.37 sec)
mysql-(ytt/3305)->insert into c2 select if(gender = 0,'',null) from c1;Query OK, 33554432 rows affected (2 min 18.80 sec)Records: 33554432 Duplicates: 0 Warnings: 0
兩張表的磁碟佔用差不多。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl總用量 1.9G4085684 933M -rw-r----- 1 mysql mysql 932M 12月 11 10:16 c1.ibd4082686 917M -rw-r----- 1 mysql mysql 916M 12月 11 10:22 c2.ibd
檢索方式稍微有些不同,不過效率也差不多。所以說,字元類型不愧為萬能類型。
七、枚舉類型
1. 最大佔用 2 Byte。2. 最大支持 65535 個不同元素。3. MySQL 後台存儲以下標的方式,也就是 tinyint 或者 smallint 的方式,下標從 1 開始。4. 排序時按照下標排序,而不是按照裡面元素的數據類型。所以這點要格外注意。
創建表 t7。mysql-(ytt/3305)->create table t7(c1 enum('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.03 sec)
1. 最大佔用 8 Byte,int64。2. 內部以二進制位的方式存儲,對應的下標如果以十進制來看,就分別為 1,2,4,8,...,pow(2,63)。3. 最大支持 64 個不同的元素,重復元素的插入,取出來直接去重。4. 元素之間可以組合插入,比如下標為 1 和 2 的可以一起插入,直接插入 3 即可。
mysql-(ytt/3305)->create table c7(c1 set('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.02 sec)
mysql-(ytt/3305)->INSERT INTO c7WITH RECURSIVE ytt_number (cnt) AS ( SELECT 1 AS cnt UNION ALL SELECT cnt + 1 FROM ytt_number WHERE cnt < pow(2, 7) )SELECT *FROM ytt_number;Query OK, 128 rows affected (0.01 sec)Records: 128 Duplicates: 0 Warnings: 0
示例 10
mysql-(ytt/3305)->select ytt_sample_data_type(1111,222) 'result';+--------------------------+| result |+--------------------------+| The result is: '246642'. |+--------------------------+1 row in set (0.00 sec)
綜上所述,日期這塊類型的選擇遵循以下原則:
4. 如果有保存毫秒類似的需求,最好是用時間類型自己的特性,不要直接用字元類型來代替。MySQL 內部的類型轉換對資源額外的消耗也是需要考慮的。
示例 5
binary 和 varbinary 對應了 char 和 varchar 的二進制存儲,相關的特性都一樣。不同的有以下幾點:
示例 6
來看這個 binary 存取的簡單示例,還是之前的變數 @a。
切記!這里要提前計算好 @a 佔用的位元組數,以防存儲溢出。
bit 為 MySQL 里存儲比特位的類型,最大支持 64 比特位, 直接以二進制方式存儲,一般用來存儲狀態類的信息。比如,性別,真假等。具有以下特性:
示例 7
其實這樣的場景,也可以定義為 char(0),這也是類似於 bit 非常優化的一種用法。
那現在我給表 c1 簡單的造點測試數據。
把 c1 的數據全部插入 c2。
枚舉類型,也即 enum。適合提前規劃好了所有已經知道的值,且未來最好不要加新值的情形。枚舉類型有以下特性:
示例 8
八、集合類型
集合類型 SET 和枚舉類似,也是得提前知道有多少個元素。SET 有以下特點:
示例 9
定義表 c7 欄位 c1 為 set 類型,包含了 8 個值,也就是下表最大為 pow(2,7)。
插入 1 到 128 的所有組合。
九、數據類型在存儲函數中的用法
函數里除了顯式聲明的變數外,默認 session 變數的數據類型很弱,隨著給定值的不同隨意轉換。
定義一個函數,返回兩個給定參數的乘積。定義里有兩個變數,一個是 v_tmp 顯式定義為 int64,另外一個 @vresult 隨著給定值的類型隨意變換類型。
簡單調用下。
總結
本篇把 MySQL 基本的數據類型做了簡單的介紹,並且用了一些容易理解的示例來梳理這些類型。我們在實際場景中,建議選擇適合最合適的類型,不建議所有數據類型簡單的最大化原則。比如能用 varchar(100),不用 varchar(1000)。
9. 如何查看mysql資料庫
查看當前使用的資料庫,可使用如下命令
mysql> select database(); #使用函數database()
mysql> show tables; #列頭信息中可看出當前使用的db,格式為:Tables_in_[db_name]
mysql> status; #注意結果中的"Current database:"信息
查看系統中有哪些資料庫,
mysql> show databases;
更換當前使用的資料庫,
mysql> use db_name;
返回當前資料庫下的所有表的名稱
mysql> show tables;
或者直接用如下命令
mysql> show tables from db_name;
查看錶結構,可使用如下命令
mysql> desc 表名;
mysql> describe 表名;
mysql> show columns from 表名;
mysql> show create table 表名;
或者,
mysql> use information_schema
mysql> select * from columns where table_name='表名';
15個 MySQL 菜鳥問題
問題1:你如何確定 MySQL 是否處於運行狀態?
答案: Debian 上運行命令 service mysql status,在RedHat 上運行命令 service mysqld status。然後看看輸出即可。
問題2:如何開啟或停止 MySQL 服務?
答案:運行命令 service mysqld start 開啟服務;運行命令 service mysqld stop 停止服務。
問題3:如何通過 Shell 登入 MySQL?
答案:運行命令 mysql -u root -p
問題4:如何列出所有資料庫?
答案:運行命令 show databases;
問題5: 如何切換到某個資料庫並在上面工作?
答案:運行命令 use database_name; 進入名為 database_name 的資料庫。
問題6:如何列出某個資料庫內所有表?
答案:在當前資料庫運行命令 show tables;
問題7:如何獲取表內所有 Field 對象的名稱和類型?
答案:運行命令 describe table_name;
問題8:如何刪除表?
答案:運行命令 drop table table_name;
問題9:如何刪除資料庫?
答案:運行命令 drop database database-name;
問題10:如何查看錶內所有數據?
答案:運行命令 select * from table_name;
問題11:如何從表(比如 oc_users )中獲取一個 field 對象(比如 uid)的所有數據?
答案:運行命令 select uid from oc_users;
問題12:假設你有一個名為 『xyz』 的表,它存在多個欄位,如 『createtime』 和 『engine』。名為 engine 的欄位由 『Memoty』 和 『MyIsam』 兩種數值組成。如何只列出 『createtime』 和 『engine』 這兩列並且 engine 的值為 『MyIsam』?
答案:運行命令 select create_time, engine from xyz where engine = 」MyIsam」;
問題13:如何列出表 『xrt』 內 name 域值為 『tecmint』,web_address 域值為 『tecmint.com』 的所有數據?
答案:運行命令 select * from xrt where name = 「tecmint」 and web_address = 「tecmint.com」;
問題14:如何列出表 『xrt』 內 name 域值不為 『tecmint』,web_address 域值為 『tecmint.com』 的所有數據?
答案:運行命令 select * from xrt where name != "tecmint" and web_address = "tecmint.com";
問題15:如何知道表內行數?
答案:運行命令 select count(*) from table_name;