1、什麼是數據庫mysql
數據庫管理系統(英語:Database Management System,簡稱DBMS)是爲管理數據庫而設計的電腦軟件系統,通常具備存儲、截取、安全保障、備份等基礎功能。sql
2、簡單使用數據庫
net start mysql(這個是啓動mysqld,在mysqld --install <能夠本身設置名字>)。windows
net stop mysql 關閉服務。安全
(1)在cmd窗口下,不須要鏈接到mysql裏面,也就在外部執行的指令mysqladmin -u root -p舊密碼 password 新密碼 -----這種方式在沒有配置my.ini文件前使用,若是一旦配置了,就不生效了。服務器
(2)set password for root@localhost = password(‘123’) -----進入mysql後才能夠修改。session
(3)use mysql; update user set password=password(‘123’) where user = ‘root’;-------直接修改mysql數據庫,修改用戶的密碼。less
(4)忘記root密碼修改密碼(windows):函數
1. 關閉正在運行的MySQL服務,net stop mysql(這個mysql是你添加的mysqld到系統服務時的服務名)。
2. 打開DOS窗口,轉到mysql\bin目錄。
3. 輸入mysqld --skip-grant-tables 回車。--skip-grant-tables 的意思是啓動MySQL服務的時候跳過權限表認證,由於之因此mysql啓動以後,客戶端鏈接的時候須要登錄認證,輸入密碼什麼的,是由於mysql服務端啓動的時候,加載了本身內部的一些權限相關信息的受權表、權限認證表什麼的,這樣就要求客戶端必須有認證,若是啓動的時沒有加載這些表和設置,那麼咱們客戶端再進行登錄的時候,就不須要認證了,那麼就能夠登錄上了,登錄以後,咱們到mysql這個存有全部用戶信息的表中去修改root用戶或者別的用戶的密碼了,仍是比較6的,可是這樣搞須要關閉服務端,在實際工做中想關閉mysql服務??你以爲可能嗎??記住這個問題,我後面給你們解決。 ui
注意一個問題,若是咱們直接使用的上面這個指令,也便是mysqld --skip-grant-tables,也就是直接經過mysqld啓動的mysql服務的話,咱們就不能經過net stop mysql的方式來關閉mysql服務了。可是能夠經過別的方式來關閉,我在安裝mysql的那篇博客裏面寫到了,殺進程的方式,知道你確定忘記了,再給你寫一下(win10):tasklist |findstr mysqld找到這個mysqld服務的端口號,而後taskkill /F /PID 端口號來殺死這個mysql服務的進行,之後就可使用net start/stop mysql的方式來啓動和關閉了。
4. 再開一個DOS窗口(由於剛纔那個DOS窗口已經不能動了),轉到mysql\bin目錄。
5. 輸入mysql回車,若是成功,將出現MySQL提示符 >。
6. 鏈接權限數據庫: use mysql; 。
6. 改密碼:update user set password=password("123") where user="root";(別忘了最後加分號) 。
7. 刷新權限(必須步驟):flush privileges; 。凡是涉及到密碼修改或者後面咱們會學到的權限修改,修改完以後所有要再執行一下這一句。
8. 退出 quit。
9. 註銷系統,再進入,使用用戶名root和剛纔設置的新密碼123登陸。
(5)在初始文件中設置帳號密碼
在這個根目錄下找my.ini,若是沒有就本身建立一個,文件名是my,文件的後綴名是ini。在裏面配置一句話:
[mysql]
user=root #root是用戶名
password=000 #這裏的000就是密碼
#配置客戶端鏈接的時候,指定一下用戶名和密碼,那麼咱們在進行mysql客戶端鏈接的時候,直接輸入mysql而後回車就能夠了,而且用戶是咱們指定的root用戶。
3、設置字符集
在咱們建立數據庫和表時,mysql會爲咱們默認配置一個字符集----latin1。可是咱們把漢字存入數據庫後,就會亂碼。爲了解決這個問題,下面設置一下編碼問題。
這句話放在[mysql]下 default-character-set=utf8。
再添加上下面三行,爲服務器設置編碼格式:
[mysqld]
character_set_server=utf8
collation-server=utf8_general_ci
#就是一個校對規則,通常默認都是這個,若是不是就改爲這個就能夠了,因此直接寫上就好了,這個規則後面咱們會講的~~~
添加下面兩行目的是爲了,來客戶端了解時,編碼設置爲utf-8:
[client]
default-character-set=utf8
上面內容最好放到[mysqld]上面,不然可能會報出下面的錯誤:
mysql: unknown variable 'sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'
來張圖卡一下:
上面的文件配置完畢後,須要重啓一下服務,而後再次進來時,就不須要輸入mysql -uroot -p ,直接輸入mysql就能夠進入了。
4、基本數據類型
數值類型(整數類型,浮點類型),字符類型,日期時間類型,枚舉類型,集合類型
2.日期類型
YEAR
YYYY(範圍:1901/2155)2018
DATE
YYYY-MM-DD(範圍:1000-01-01/9999-12-31)例:2018-01-01
TIME
HH:MM:SS(範圍:'-838:59:59'/'838:59:59')例:12:09:32
DATETIME
YYYY-MM-DD HH:MM:SS(範圍:1000-01-01 00:00:00/9999-12-31 23:59:59 Y)例: 2018-01-01 12:09:32
TIMESTAMP
YYYYMMDD HHMMSS(範圍:1970-01-01 00:00:00/2037 年某時)
3.字符串類型
Char 和varchar,前者是不可變長的,定義爲多少,在內存中就佔多少;varchar是可變長度的,可是爲了讀取準確,會在每一個字符串前面添加一個這個字符串長度的記錄,所以也佔了一位。
看下錶,說明了這二者的特色與區別:
再來看看其餘的字符串類型:
二者的區別:1.讀取速度char大於varchar,由於varchar讀取時還得使用開始的長度;2.存儲方式,char根據寬度開闢存儲空間能夠按照寬度直接取值,varchar會按照存入的長度進行開闢空間,爲了識別存入的內容會在最開始的位置添加此段內容的長度。3.char在存儲空間的寬度是不可變的,varchar是可變的。
4.枚舉類型和集合類型
枚舉類型(enum)
An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.) 示例: CREATE TABLE shirts ( name VARCHAR(40), size ENUM('x-small', 'small', 'medium', 'large', 'x-large') ); INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
集合類型(set) A SET column can have a maximum of 64 distinct members. 示例: CREATE TABLE myset (col SET('a', 'b', 'c', 'd')); INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
5.嚴格模式
嚴格模式若是級別較低,有些狀況下會致使明明錯了,可是卻並不會報錯。例如:設置了,字段不爲空,可是若是模式不嚴格,那麼不會報錯,int型的會默認給個0,其餘的會默認給個NULL。
好了設置一下模式吧:
方式一:先執行select @@sql_mode,複製查詢出來的值並將其中的NO_ZERO_IN_DATE,NO_ZERO_DATE刪除,而後執行set sql_mode = '修改後的值'或者set session sql_mode='修改後的值';,例如:set session sql_mode='STRICT_TRANS_TABLES';改成嚴格模式
此方法只在當前會話中生效,關閉當前會話就不生效了。
方式二:先執行select @@global.sql_mode,複製查詢出來的值並將其中的NO_ZERO_IN_DATE,NO_ZERO_DATE刪除,而後執行set global sql_mode = '修改後的值'。
此方法在當前服務中生效,從新MySQL服務後失效
方法三:在mysql的安裝目錄下,或my.cnf文件(windows系統是my.ini文件),新增 sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,
添加my.cnf以下:
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER
而後重啓mysql。
此方法永久生效.固然生產環境上是禁止重啓MySQL服務的,因此採用方式二加方式三來解決線上的問題,那麼即使是有一天真的重啓了MySQL服務,也會永久生效了。
sql_mode經常使用值以下: ONLY_FULL_GROUP_BY: 對於GROUP BY聚合操做,若是在SELECT中的列,沒有在GROUP BY中出現,那麼這個SQL是不合法的,由於列不在GROUP BY從句中 NO_AUTO_VALUE_ON_ZERO: 該值影響自增加列的插入。默認設置下,插入0或NULL表明生成下一個自增加值。若是用戶 但願插入的值爲0,而該列又是自增加的,那麼這個選項就有用了。 STRICT_TRANS_TABLES: 在該模式下,若是一個值不能插入到一個事務表中,則中斷當前的操做,對非事務表不作限制 NO_ZERO_IN_DATE: 在嚴格模式下,不容許日期和月份爲零 NO_ZERO_DATE: 設置該值,mysql數據庫不容許插入零日期,插入零日期會拋出錯誤而不是警告。 ERROR_FOR_DIVISION_BY_ZERO: 在INSERT或UPDATE過程當中,若是數據被零除,則產生錯誤而非警告。如 果未給出該模式,那麼數據被零除時MySQL返回NULL NO_AUTO_CREATE_USER: 禁止GRANT建立密碼爲空的用戶 NO_ENGINE_SUBSTITUTION: 若是須要的存儲引擎被禁用或未編譯,那麼拋出錯誤。不設置此值時,用默認的存儲引擎替代,並拋出一個異常 PIPES_AS_CONCAT: 將"||"視爲字符串的鏈接操做符而非或運算符,這和Oracle數據庫是同樣的,也和字符串的拼接函數Concat相相似 ANSI_QUOTES: 啓用ANSI_QUOTES後,不能用雙引號來引用字符串,由於它被解釋爲識別符
5、數據庫操做
CREATE DATABASE 數據庫名 <charset utf8,若是my.ini已經配置過,不須要。沒有配置過,能夠寫,也能夠不寫。>
2.數據庫命名規則
能夠由字母、數字、下劃線、@、#、$
區分大小寫
惟一性
不能使用關鍵字如 create select等
不能單獨使用數字
最長128位
3.數據庫相關操做
1) 查看數據庫
show databases;
show create database 數據庫名;
select database();
2) 選擇數據庫
USE 數據庫名
3) 刪除數據庫
DROP DATABASE 數據庫名;
4) 修改數據庫
alter database 數據庫名 charset utf8;
6、表操做
如今經常使用的引擎有:InnoDB,MyISAM等。如今,mysql默認使用的是InnoDB,這種引擎,這種引擎,使用的是行鎖定,也就是若是有一個客戶端使用某一行數據了,其餘的客戶端就不能使用。支持事物處理。
MyISAM支持表鎖定。
#語法:
create table 表名(
字段名1 類型[(寬度) 約束條件],
字段名2 類型[(寬度) 約束條件],
字段名3 類型[(寬度) 約束條件]
);
#注意:
(1)在同一張表中,字段名是不能相同
(2)寬度和約束條件可選、非必須,寬度指的就是字段長度約束,例如:char(10)裏面的10
(3) 字段名和類型是必須的
例如:
mysql> create table t1( -> id int, -> name varchar(50), -> sex enum('male','female'), -> age int(3) -> );
注意:每一個字段後面都要使用逗號隔開,最後結尾時,要使用分號。逗號和分號都是英文狀態下的。
3.插入數據到表中
插入數據的sql語句:
mysql> insert into t1 values -> (1,'zhangsan',18,'male'), -> (2,'lisi',81,'female') -> ;
注意:插入的每條消息後都要使用逗號分隔,最後結尾時使用分號。逗號和分號也必須是英文狀態下的。
4.查看錶結構
(1)describe t1; #查看錶結構,可簡寫爲:desc 表名 會展現出來表中字段的信息和一切要求。 (2)show create table t1\G; #查看錶詳細結構,可加\G
5.表的完整性約束
1)not null 與default create table tb1( nid int not null defalut 2,#nid設置爲int型,不可爲空(not null),default 默認值設置爲2 num int not null #num設置爲int型,而且不可爲空 ); (2)unique----惟一 1)設置惟一 方法一: create table department1( id int, name varchar(20) unique,#name字段必須是惟一的不可重複的 comment varchar(100) ); 方法二: create table department2( id int, name varchar(20), comment varchar(100), constraint uk_name unique(name)#name字段必須是惟一的不可重複的 ); 2)聯合惟一 create table service( id int primary key auto_increment, name varchar(20), host varchar(15) not null, port int not null, unique(host,port) #聯合惟一);#二者必須同時與已存在的數據同樣時纔會報錯
7、修改表
語法:1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增長字段 ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…], #注意這裏能夠經過逗號來分割,一下添加多個約束條件 ADD 字段名 數據類型 [完整性約束條件…]; ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…] FIRST; #添加這個字段的時候,把它放到第一個字段位置去。 ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…] AFTER 字段名;#after是放到後的這個字段的後面去了,咱們經過一個first和一個after就能夠將新添加的字段放到表的任意字段位置了。 3. 刪除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段 ALTER TABLE 表名 MODIFY 字段名 數據類型 [完整性約束條件…]; ALTER TABLE 表名 CHANGE 舊字段名 新字段名 舊數據類型 [完整性約束條件…]; #change比modify還多了個更名字的功能,這一句是隻改了一個字段名 ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數據類型 [完整性約束條件…];#這一句除了改了字段名,還改了數據類型、完整性約束等等的內容