基于Linux的MySQL操作實(shí)例(軟件安裝,mysql基本操作,mysql數(shù)據(jù)類(lèi)型,建表、插入數(shù)據(jù)操作)

基于Linux的MySQL操作實(shí)例(軟件安裝,mysql基本操作,mysql數(shù)據(jù)類(lèi)型,建表、插入數(shù)據(jù)操作)

前言

關(guān)于MySQL的概念性的東西,就在這里不多說(shuō)了,本篇以實(shí)例操作為主,主要進(jìn)行的操作有:MySQL軟件安裝,mysql基本操作,mysql數(shù)據(jù)類(lèi)型,建表、插入數(shù)據(jù)操作。
歡迎各路大神批評(píng)指教,謝謝各位。

安裝軟件

  • 源碼安裝,見(jiàn)腳本和源碼包
  • rpm包安裝(需要手動(dòng)安裝依賴包)

本文使用的rpm安裝包都是從MySQL官網(wǎng)下載的。
由于個(gè)人原因GitHub暫時(shí)不能上傳,我將文件放在了百度云盤(pán),有需要的朋友請(qǐng)前往下載。若是不能下載,請(qǐng)私信我。
MySQL5.6,點(diǎn)擊下載
http://pan.baidu.com/s/1jIr11Sq

當(dāng)使用rpm包安裝時(shí),可能會(huì)出現(xiàn)缺乏依賴包的情況,
可以使用先安裝光盤(pán)自帶的mysql-server,mysql,yum會(huì)自動(dòng)安裝依賴包等,
然后啟動(dòng)服務(wù),檢查端口號(hào),由于mysql在默認(rèn)的情況下,若不加載數(shù)據(jù)庫(kù)將不能啟動(dòng)服務(wù),但是通過(guò)光盤(pán)自帶的軟件包使用yum安裝時(shí),
這些配置都會(huì)自動(dòng)做好。
然后卸載(卸載時(shí)需要添加--nodeps選項(xiàng),忽略依賴關(guān)系)低版本mysql軟件包,并刪除主配置文件

[root@mysqlBak mysql_rpm]# yum -y install mysql-server mysql
[root@mysqlBak mysql_rpm]# service mysqld restart 
停止 mysqld:                                              [確定]
初始化 MySQL 數(shù)據(jù)庫(kù): WARNING: The host 'mysqlBak.wolf.cn' could not be looked up with resolveip.
……
Please report any problems with the /usr/bin/mysqlbug script!
                                                           [確定]
正在啟動(dòng) mysqld:                                          [確定]
[root@mysqlBak mysql_rpm]# netstat -anptu | grep mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2310/mysqld  
[root@stu ~]# service  mysqld stop
停止 mysqld:                                             [確定]
[root@mysqlBak mysql_rpm]# rm -rf /etc/my.cnf 
[root@mysqlBak mysql_rpm]# ls /var/lib/mysql/
ibdata1  ib_logfile0  ib_logfile1  mysql  test
[root@mysqlBak mysql_rpm]# rm -rf /var/lib/mysql/*
// 卸載時(shí),注意添加忽略依賴關(guān)系選項(xiàng),
[root@mysqlBak mysql_rpm]# rpm -e --nodeps mysql-server mysql
[root@mysqlBak mysql_rpm]# ls
MySQL-client-5.6.15-1.el6.x86_64.rpm    MySQL-shared-5.6.15-1.el6.x86_64.rpm
MySQL-devel-5.6.15-1.el6.x86_64.rpm     MySQL-shared-compat-5.6.15-1.el6.x86_64.rpm
MySQL-embedded-5.6.15-1.el6.x86_64.rpm  MySQL-test-5.6.15-1.el6.x86_64.rpm
MySQL-server-5.6.15-1.el6.x86_64.rpm
//推薦使用U升級(jí)安裝,可以替換沖突文件
[root@mysqlBak mysql_rpm]# rpm -Uvh MySQL-*
Preparing...                ########################################### [100%]
   1:MySQL-devel            ########################################### [ 14%]
   2:MySQL-client           ########################################### [ 29%]
   3:MySQL-test             ########################################### [ 43%]
   4:MySQL-embedded         ########################################### [ 57%]
   5:MySQL-shared-compat    ########################################### [ 71%]
   6:MySQL-shared           ########################################### [ 86%]
   7:MySQL-server           ########################################### [100%]
///root/.mysql_secret'  生成的隨機(jī)密碼文件
A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER !
You will find that password in '/root/.mysql_secret'.
……

[root@mysqlBak mysql_rpm]# /etc/init.d/mysql start
Starting MySQL. SUCCESS! 
[root@mysqlBak mysql_rpm]# netstat -anptu | grep mysql
tcp        0      0 :::3306                     :::*                        LISTEN      2565/mysqld
//查看文件內(nèi)容,記錄隨機(jī)密碼
[root@mysqlBak mysql_rpm]# cat /root/.mysql_secret 
# The random password set for the root user at Mon Jan 16 11:31:07 2017 (local time): Xrf4Yrok

//使用隨機(jī)密碼先進(jìn)行登錄,然后進(jìn)行修改密碼等操作
[root@mysqlBak mysql_rpm]# mysql -hlocalhost -u root -pXrf4Yrok
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.6.15

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql> show databases;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement  //需要先設(shè)置密碼,然后進(jìn)行其他操作
mysql> set password for root@"localhost"=password("123456");
Query OK, 0 rows affected (0.03 sec)
mysql> quit
Bye
//若沒(méi)有其他配置需求可不進(jìn)行該操作
[root@mysqlBak mysql_rpm]# cp /usr/share/mysql/my-default.cnf /etc/my.cnf
//可以直接制定數(shù)據(jù)庫(kù)
[root@mysqlBak mysql_rpm]# mysql -u root -p123456 test
……
mysql> select database();
+------------+
| database() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)

mysql> quit
Bye
//也可以不指定該數(shù)據(jù)庫(kù)
[root@mysqlBak mysql_rpm]# mysql -u root -p123456
……
mysql> select database();
+------------+
| database() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

MySQL概述

基本信息

  • 主配置文件 /etc/my.cnf
  • 服務(wù)名 mysqld或mysql (根據(jù)不同版本略有不同)
  • 進(jìn)程名 mysqld或mysql
  • 進(jìn)程所有者/組 mysql/mysql
  • 端口號(hào) 3306
  • 傳輸協(xié)議 tcp
  • 數(shù)據(jù)庫(kù)目錄 /var/lib/mysql/

數(shù)據(jù)庫(kù)基本操作流程

1.連接數(shù)據(jù)庫(kù)服務(wù)器 mysql
2.選擇庫(kù) use 庫(kù)名;
3.創(chuàng)建表
4.向表中插入記錄 insert into
5.曾刪改查等數(shù)據(jù)操作
6.斷開(kāi)連接 quit

數(shù)據(jù)以文件的形式存儲(chǔ)在數(shù)據(jù)庫(kù)目錄下

數(shù)據(jù)庫(kù)基本使用概述

操作指令類(lèi)型

  • MySQL指令:環(huán)境切換,看狀態(tài),退出等控制
  • SQL指令:數(shù)據(jù)庫(kù)定義/查詢/操縱/授權(quán)語(yǔ)句

基本操作注意事項(xiàng)

  • 操作指令不區(qū)分大小寫(xiě)
  • 每條SQL語(yǔ)句以;結(jié)束或分隔
  • 不支持tab鍵自動(dòng)補(bǔ)齊
  • \c可廢棄當(dāng)前編寫(xiě)錯(cuò)的操作指令

數(shù)據(jù)庫(kù)名稱命名規(guī)則

  • 具有唯一性
  • 區(qū)分字母大小寫(xiě)
  • 只能使用數(shù)字、字母、“_”
  • 不能是純數(shù)字
  • 不要使用特殊字符和關(guān)鍵字

操作命令基本格式

show databases; 顯示已有的庫(kù)
create database 庫(kù)名;
use 庫(kù)名; 切換庫(kù)
select database(); 查看當(dāng)前所在的庫(kù)
drop database 庫(kù)名; 刪除已有的庫(kù)
show tables; 顯示當(dāng)前所在庫(kù)下已有的表
創(chuàng)建表(表存放在庫(kù)里)
create table 庫(kù)名.表名(
字段名1 類(lèi)型,
字段名2 類(lèi)型,
字段名3 類(lèi)型
);
select 字段名列表 from 表名; 查看表記錄
desc 表名; 查看表結(jié)構(gòu)
insert into 表名 values(值1,值2……);向表中插入記錄
delete from 表名; 刪除表中的所有記錄
drop table 表名; 刪除表
建表的語(yǔ)法格式

create table 表名(
字段名 類(lèi)型(寬度) 約束條件,
字段名 類(lèi)型(寬度) 約束條件,
字段名 類(lèi)型(寬度) 約束條件
);

mysql數(shù)據(jù)庫(kù)類(lèi)型概述

字符類(lèi)型 (eg:姓名 家庭地址)

char 定長(zhǎng) 255
varchar 變長(zhǎng) 255+
65532
大文本類(lèi)型
blob
text

數(shù)值類(lèi)型 (eg:工資,成績(jī),年齡,身高,體重)

數(shù)據(jù)類(lèi)型截圖
  • 整數(shù)類(lèi)型
    根據(jù)存儲(chǔ)數(shù)值的范圍又分為:
    tinyint
    smallint
    MEDIUMINT
    int
    bigint

  • 浮點(diǎn)型
    float double
    單精度 雙精度

float(n,m)
double(n,m)
n 表示總位數(shù)
m 表小數(shù)位位數(shù)

整數(shù).小數(shù)
1023.77

數(shù)值類(lèi)型的寬度是顯示寬度,不能夠控制給字段賦值的大小,字段值的大小由字段類(lèi)型決定。

  • 日期時(shí)間類(lèi)型 (eg:生日,注冊(cè)時(shí)間,入職時(shí)間)
    年 year YYYY 2016
    01-69 20XX
    70-99 19XX
    00 0000
    日期 date YYYYMMDD 20161219
    時(shí)間 time HHMMSS 144518
    日期時(shí)間 ( 約會(huì)時(shí)間 )
    datetime / timestamp
    YYYYMMDDHHMMSS
    20170214183018

    datetime 與 timestamp 的區(qū)別?
    當(dāng)不給timestamp類(lèi)型的字段賦值時(shí),用系統(tǒng)當(dāng)前的時(shí)間給字段賦值。

    使用時(shí)間函數(shù)獲取時(shí)間給日期時(shí)間類(lèi)型字段賦值?
    now() 獲取當(dāng)前系統(tǒng)時(shí)間
    year() 獲取年份
    date() 獲取日期
    month() 獲取月份
    day() 獲取日期(幾號(hào))
    time() 獲取時(shí)間

  • 枚舉類(lèi)型 (eg:愛(ài)好,性別,專業(yè) )
    字段的值只能在列舉的范圍內(nèi)選擇
    enum(值列表) 單選
    set(值列表) 多選

  • 查看建表過(guò)程
    show create table 表名;

MySQL操作實(shí)例

[root@mysqlBak mysql_rpm]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
……

//查看當(dāng)前數(shù)據(jù)庫(kù)
//以下都是mysql自帶數(shù)據(jù)庫(kù),不要輕易修改系統(tǒng)自帶數(shù)據(jù)庫(kù),以免出現(xiàn)錯(cuò)誤
//mysql是授權(quán)庫(kù),test是測(cè)試庫(kù)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
//創(chuàng)建新的數(shù)據(jù)庫(kù)
mysql> create database user_list;
Query OK, 1 row affected (0.00 sec)
//查看當(dāng)前使用的數(shù)據(jù)庫(kù),若是在登錄mysql時(shí)指定時(shí),當(dāng)前即可看到指定的數(shù)據(jù)庫(kù)
mysql> select database();
+------------+
| database() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)
//更改當(dāng)前使用的數(shù)據(jù)庫(kù)
mysql> use user_list;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| user_list  |
+------------+
1 row in set (0.00 sec)
mysql> ls
    -> \c
mysql> show tables;
Empty set (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| user_list          |
+--------------------+
5 rows in set (0.00 sec)

mysql> use mysql 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables
    -> ;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
28 rows in set (0.00 sec)
//切換到我們新建的數(shù)據(jù)庫(kù),
mysql> use user_list;
Database changed
//查看當(dāng)前數(shù)據(jù)庫(kù)內(nèi)的表,結(jié)果為空
mysql> show tables;
Empty set (0.00 sec)
//使用SQL指令創(chuàng)建name_list表
mysql> create table name_list ( n_id int(10) primary key, name char(10), age int(3), sex enum("boy","girl") );
Query OK, 0 rows affected (0.36 sec)
//查看name_list表結(jié)構(gòu)
mysql> desc name_list
    -> ;
+-------+--------------------+------+-----+---------+-------+
| Field | Type               | Null | Key | Default | Extra |
+-------+--------------------+------+-----+---------+-------+
| n_id  | int(10)            | NO   | PRI | NULL    |       |
| name  | char(10)           | YES  |     | NULL    |       |
| age   | int(3)             | YES  |     | NULL    |       |
| sex   | enum('boy','girl') | YES  |     | NULL    |       |
+-------+--------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
//插入數(shù)據(jù)
mysql> insert into name_list values(
    -> 1,"tom",14,"boy");
Query OK, 1 row affected (0.05 sec)
//查看name_list內(nèi)全部數(shù)據(jù)
mysql> select * from name_list;
+------+------+------+------+
| n_id | name | age  | sex  |
+------+------+------+------+
|    1 | tom  |   14 | boy  |
+------+------+------+------+
1 row in set (0.01 sec)

//字符類(lèi)型實(shí)例
mysql> create  table  t1(name varchar(256));
mysql> create   table  t7(name char(3),age  tinyint);
mysql> insert into  t7  values("jim",19);
mysql> create   table  t10(name char(3),age  tinyint unsigned);
mysql> create   table  t11(name char(3), level  int(3));
mysql> insert into  t11 values("bob",1024);
mysql> create table  t12(level1  int(3) zerofill,level2 int(7) zerofill); 
mysql> create  table  t13 (name  char(10),age tinyint(2) unsigned , pay  float(7,2));
mysql> insert into  t13  values("bob",21,18000.23);
//時(shí)間函數(shù)實(shí)例
mysql> create  table  t14 (name  char(10),age tinyint(2) unsigned , pay  float(7,2),s_year  year,birthday date,up_class  time,meetting datetime);
mysql> insert into  t14  values("bob",21,18000,1991,20160718,083000,20160818180000);
mysql> insert into  t14  values("tom",29,28000,now(),now(),now(),now());
mysql> select year(20170918);
+----------------+
| year(20170918) |
+----------------+
|           2017 |
+----------------+
1 row in set (0.03 sec)

mysql> select year(20190918);
+----------------+
| year(20190918) |
+----------------+
|           2019 |
+----------------+
1 row in set (0.00 sec)
mysql> select year( now() );
+---------------+
| year( now() ) |
+---------------+
|          2016 |
+---------------+
1 row in set (0.00 sec)

mysql> select day( now() );
+--------------+
| day( now() ) |
+--------------+
|           17 |
+--------------+
1 row in set (0.00 sec)
mysql> select month( now() );
+----------------+
| month( now() ) |
+----------------+
|              6 |
+----------------+
1 row in set (0.00 sec)
mysql> select time( now() );
+---------------+
| time( now() ) |
+---------------+
| 09:14:38      |
+---------------+
1 row in set (0.00 sec)

mysql> insert into  t14  values("lucy",29,28000,year(20190817),now(),time(now()),now());
mysql> select sleep(2);
+----------+
| sleep(2) |
+----------+
|        0 |
+----------+
1 row in set (2.01 sec)
mysql> insert into  t14(s_year)values(00);
Query OK, 1 row affected (0.07 sec)
mysql> select s_year from t14;
+--------+
| s_year |
+--------+
|   1991 |
|   2016 |
|   2019 |
|   0000 |
+--------+
4 rows in set (0.00 sec)
mysql> insert into  t14(s_year)values(100);
ERROR 1264 (22003): Out of range value for column 's_year' at row 1
mysql> create  table  t15(time1   datetime ,time2  timestamp);
mysql> insert  into t15  values(now(),now());
mysql> insert  into t15(time2)  values(20160617173423);
//枚舉類(lèi)型實(shí)例
mysql> create  table t16(
    -> name  char(10),
    -> sex  enum("boy","girl","no"),
    -> likes  set("moneny","girl","book","film")
);
mysql> insert  into t16 values("bob","man","A,football");
mysql> desc t16;
+-------+------------------------------------+------+-----+---------+-------+
| Field | Type                               | Null | Key | Default | Extra |
+-------+------------------------------------+------+-----+---------+-------+
| name  | char(10)                           | YES  |     | NULL    |       |
| sex   | enum('boy','girl','no')            | YES  |     | NULL    |       |
| likes | set('moneny','girl','book','film') | YES  |     | NULL    |       |
+-------+------------------------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> insert  into t16 values("bob","man","A,football");
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
mysql> insert  into t16 values("bob","boy","A,football");
ERROR 1265 (01000): Data truncated for column 'likes' at row 1
mysql> insert  into t16 values("bob","boy","moneny,book");
Query OK, 1 row affected (0.04 sec)
mysql> select * from t16;
+------+------+-------------+
| name | sex  | likes       |
+------+------+-------------+
| bob  | boy  | moneny,book |
+------+------+-------------+
1 row in set (0.00 sec)

mysql> insert into  t16  values("lucy",2,"book");
mysql> insert into  db1.t16 values(null,null,null)
mysql> create  table t17(
    ->name  char(10) not null,
    ->age  tinyint(2) unsigned  default 21,
    ->sex  enum("boy","girl","no") not null default "boy",
    ->likes  set("moneny","girl","book","film") not null
    ->default "moneny,girl");

mysql> insert into  t17(name)values("bob");
mysql> insert into  t17  values("lucy",23,"no","book,film");
mysql> insert into  t17  values(NULL,23,"no","book,film");
mysql> insert into  t17  values(NULL,NULL,"no","book,film");
ERROR 1048 (23000): Column 'name' cannot be null
mysql> insert into  t17  values("NULL",NULL,"no","book,film");
Query OK, 1 row affected (0.03 sec)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容