一:Mysql安裝
#yum install mysql
#yum install mysql-server
#yum install mysql-devel
啟動mysql
#service mysqld start
驗證安裝
#mysql --version
設定資料庫登入密碼
#mysqladmin -u root password "new_password";
密碼登入
# mysql -u root -p
Enter password:*******
二:Mysql管理
添加使用者
# mysql -u root -p
mysql> use mysql;
mysql> INSERT INTO user (host, user, password,select_priv, insert_priv, update_priv)VALUES ('localhost', 'guest',PASSWORD('guest123'), 'Y', 'Y', 'Y');
mysql> FLUSH PRIVILEGES;
注意:PASSWORD() 函數來對密碼進行加密。 你可以在以上執行個體看到使用者密碼加密後為: 6f8c114b58f2ce9e.
注意:在注意需要執行 FLUSH PRIVILEGES 語句。 這個指令執行後會重新載入授權表。如果你不使用該指令,你就無法使用新建立的使用者來連接配接mysql伺服器,除非你重新開機mysql伺服器。
配置檔案
mysql配置檔案在/etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
管理mysql指令
mysql> use RUNOOB;
mysql> SHOW DATABASES;
mysql> SHOW TABLES;
root密碼重置
#vim /etc/my.cnf
在[mysqld]下添加skip-grant-tables,然後儲存并退出
重新開機mysql服務:service mysqld restart
三:Mysql連接配接
連接配接
# mysql -u root -p
退出
mysql> exit
四:Mysql管理資料庫
建立資料庫
# mysqladmin -u root -p create RUNOOB
删除資料庫
#mysqladmin -u root -p drop RUNOOB
備份資料庫
#mysqldump -uroot -p -h127.0.0.1 --opt mysql > mysql.sql
修改資料庫密碼
mysqladmin -u root password "新密碼";
五:資料類型
大緻可以分為三類:數值、日期/時間和字元串(字元)類型。
tinyint、smallint、mediumint、int、bigint、float、double、decimal
數值
日期/時間
data、time、year、datetime、timestamp
字元串
char、varchar、tinyblob、tinytext、blob、text、mediumblob、mediumtext、longblob、longtext
最大整數:bigint
最大字元串:longtext
六:表的增、删、查、改
6.1建立
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table yy5(id int,name varchar(20));
解析:
如果你不想字段為 NULL 可以設定字段的屬性為 NOT NULL, 在操作資料庫時如果輸入該字段的資料為NULL ,就會報錯。
AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵,數值會自動加1。
PRIMARY KEY關鍵字用于定義列為主鍵。 您可以使用多列來定義主鍵,列間以逗号分隔。
ENGINE 設定存儲引擎,CHARSET 設定編碼。
6.2删除
DROP TABLE test;
DELETE FROM runoob_tbl WHERE runoob_id=3;
6.3查詢
select * from runoob_tbl;
6.4修改
增加:
INSERT INTO runoob_tbl
(runoob_title, runoob_author, submission_date)
VALUES
("學習mysql","mysql",NOW());
修改:
UPDATE runoob_tbl SET runoob_title='學習 C++' WHERE runoob_id=3;
七:LIKE 子句
7.1查詢user表中姓名中包含“王”字的:
select * from user where name like '%王%';
7.2查詢user表中姓名中沒有“王”字的:
select * from user where name not like '%王%';
7.3查詢user中姓名以“王”開頭的:
select * from user where name not like '王%';
7.4查詢user中姓名以“王”結尾的:
select * from user where name not like '%王';
7.5查詢user表中位址在上海姓名中沒有“王”字和所有姓名為空的:
select * from user where adress =‘上海’ and name not like '%王%' or name is null;
7.6查詢user表中位址在上海姓名中沒有“王”字和位址在上海姓名為空的:
select * from user where adress =‘上海’ and (name not like '%王%' or name is null);
八:union
8.1求兩個table某列的交集
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
8.2求兩個table某列的并集
UNION ALL
九:排序-order by
SELECT * from runoob_tbl ORDER BY submission_date ASC;
SELECT * from runoob_tbl ORDER BY submission_date DESC;
十:分組-group by
GROUP BY 語句根據一個或多個列對結果集進行分組。
在分組的列上我們可以使用 COUNT, SUM, AVG,等函數。
mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
+--------+----------+
| name | COUNT(*) |
+--------+----------+
| 小麗 | 1 |
| 小明 | 3 |
| 小王 | 2 |
+--------+----------+
3 rows in set (0.01 sec)
十一:INNER JOIN
Mysql和JOIN來進行多連接配接
JOIN 按照功能大緻分為如下三類:
INNER JION:内連接配接或者等值連接配接
LEFT JION:左連接配接
RIGHT JION:右連接配接
1: INNER JOIN
SELECT
a.runoob_id, a.runoob_author, b.runoob_count
FROM
runoob_tbl a INNER JOIN tcount_tbl b
ON
a.runoob_author = b.runoob_author;
等價于-------------------------------------------------------
SELECT
a.runoob_id, a.runoob_author, b.runoob_count
FROM
runoob_tbl a, tcount_tbl b
WHERE
a.runoob_author = b.runoob_author;
2: LEFT JOIN
SELECT
a.runoob_id, a.runoob_author, b.runoob_count
FROM
runoob_tbl a LEFT JOIN tcount_tbl b
ON
a.runoob_author = b.runoob_author;
十二:Null空值
mysql> SELECT * FROM runoob_test_tbl WHERE runoob_count IS NULL;
mysql> SELECT * from runoob_test_tbl WHERE runoob_count IS NOT NULL;
十三:正規表達式
MySQL中使用 REGEXP 操作符來進行正規表達式比對。
1:找出字元串中以"st"開頭的字元串
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
2:找出字元串中以“st”結束的字元串
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
3:找出字元串中包含'mar'的字元串
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
十四:事務
一般說來,事務滿足四個條件(ACID):Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)
1:事務的原子性:一組事務要麼成功,要麼失敗。
2:穩定性:有非法資料(外鍵限制),事務撤回。
3:隔離性:事務獨立運作,獨立撤回。
4:可靠性:軟硬體崩潰後,InnoDB回依靠日志問價進行重構。
事務控制語句
1:開啟事務:begin或者start transaction
2:送出事務:commit或者commit work,但二者不等價,commit會對資料庫進行徹底修改。
3:rollback:復原使用者送出的資料,并進行停止正在進行的
4:SAVEPOINT identifier:事務儲存點,一個事務可以擁有多個儲存點,
5:RELEASE SAVEPOINT identifier;删除一個事務的儲存點,當沒有指定的儲存點時,執行該語句會抛出一個異常;
6:ROLLBACK TO identifier:把事務復原到标記點;
7:SET TRANSACTION;用來設定事務的隔離級别。InnoDB存儲引擎提供事務的隔離級别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。
MYSQL 事務處理主要有兩種方法:
1、用 BEGIN, ROLLBACK, COMMIT來實作
BEGIN 開始一個事務
ROLLBACK 事務復原
COMMIT 事務确認
2、直接用 SET 來改變 MySQL 的自動送出模式:
SET AUTOCOMMIT=0 禁止自動送出
SET AUTOCOMMIT=1 開啟自動送出
十五:ALTER指令
1:ALTER TABLE 語句插入删除
删除:ALTER TABLE testalter_tbl DROP i;
增加: ALTER TABLE testalter_tbl ADD i INT;
修改字段類型:
modify:ALTER TABLE testalter_tbl MODIFY c CHAR(10); 修改c的類型為char(10)
change:ALTER TABLE testalter_tbl CHANGE i j BIGINT;
修改字段預設值:
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除字段預設值:
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
修改表名:
alert table testalert_tbl rename to alter_test;
十六:索引
十七:臨時表
建立臨時表:
CREATE TEMPORARY TABLE SalesSummary (
product_name VARCHAR(50) NOT NULL
, total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
, avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
, total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
修改臨時表:
INSERT INTO SalesSummary
(product_name, total_sales, avg_unit_price, total_units_sold)
VALUES
('cucumber', 100.25, 90, 2);
查詢臨時表:
SELECT * FROM SalesSummary;
删除臨時表:
DROP TABLE SalesSummary;
十八:複制表
1:執行SHOW CREATE TABLE runoob_tbl \G;得到建立runoob_tbl 的語句
2:執行建立runoob_tbl 的語句,并修改表名
3:将原表中的資料select複制過來
十九:中繼資料
SELECT VERSION( ) 伺服器版本資訊
SELECT DATABASE( ) 目前資料庫名 (或者傳回空)
SELECT USER( ) 目前使用者名
SHOW STATUS 伺服器狀态
SHOW VARIABLES 伺服器配置變量
二十:序列使用
1:auto_increment自增
id INT AUTO_INCREMENT,
2:重置序列
如果删除了自增的id部分值,則剩下的id不是連續的,怎樣設定為連續
mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect
-> ADD id INT AUTO_INCREMENT FIRST,
-> ADD PRIMARY KEY (id);
3:設定ip的起始值
ALTER TABLE t AUTO_INCREMENT = 100;
二十一:處理重複資料
1:防止重複資料的方法有設定主鍵和唯一索引
設定雙主鍵
CREATE TABLE person_tbl
(
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10),
PRIMARY KEY (last_name, first_name)
);
唯一索引
CREATE TABLE person_tbl
(
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10)
UNIQUE (last_name, first_name)
);
2:統計重複資料
SELECT COUNT(*) as repetitions, last_name,fist_name
from person_tbl
GROUP BY lst_name, fist_name
HAVING repetitons >1;
3:過濾重複資料
方法1;distinct
select distinct last_name, fist_name from person_tbl;
方法2:grop by
select last_name, fist_name from person_tbl GROUP BY (last_name, first_name);
二十二:MySQL導入出資料
1:select into outfile語句
select * from user_img into outfile "/tmp/mysqluser.txt";
會出現權限報錯:ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
因為導出隻能導出到規定檔案中
mysql> show global variables like '%secure%';
進行檢視:
+----------------------+---------------------------+
| Variable_name | Value |
+------------------- -+---------------------------+
| secure_auth | ON |
| secure_file_priv | /var/lib/mysql-files/- |
+---------------------+---------------------------+
可知我本地的檔案隻能複制到/var/lib/mysql-files/目錄下
mysql> select * from user_img into outfile "/var/lib/mysql-files/user_img.txt";
Query OK, 0 rows affected (0.11 sec)
導出為csv格式
mysql> SELECT * INTO OUTFILE '/var/lib/mysql-files/user_1.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM user;
Query OK, 2 rows affected (0.00 sec)
mysqldump導出資料做備份
#mysqldump -uroot -p -h127.0.0.1 --opt xserver > xserver.sql
将備份的資料導入到資料庫
mysql -u使用者名 -p -h127.0.0.1 --default-character-set=utf8 資料庫 < 需要導入的資料庫檔案.sql