MySQL筆記1 - 終端與服務器的鏈接建立,服務器的開啓與關閉,基本數句操作(增刪改查)

2017/10/30 - 數據庫編程 - day1
sql(structured query language 結構化的查詢語言);
數據庫中的語句和表屬性不區分大小寫,只有表的名字區分大小寫;
數據庫的執行語句以分號','爲結尾表示語句的結束;
注:sql中表示字符串的時候,既可以使用單引號也可以雙引號;
數據庫的分類:
數據庫的分類分爲關係型數據庫和給關係型數據庫;


命令集合:
$ whereis mysql               #查找數據庫的路徑
sudo /etc/init.d/mysql stop    #關閉mysql服務器 (計算機默認開啓)
sudo /etc/init.d/mysql start   #啓動mysql服務器
mysql -u root -p             #打開終端客戶端,建立終端與mysql的鏈接
password:123456
\c                           #清空寫下的語句
\q                           #退出終端客戶端
CREATE DATABASE testDB;      #建立數據庫
SHOW DATABASES;              #顯示數據庫
use testDB;                  #使用數據庫
select * from customers;     
show tables;
show create table customers;






1.關係型數據庫建模(構件塊):
數據以行和列的形式存儲數據;
這一系列的行和列成爲表(關係);
表中每一行表示一條記錄(元組),即行-元組;
表中每一列表示記錄的一個屬性,即-列-屬性;
一組表組成了數據庫;
表與表之間的邏輯關聯叫關係。


2.關係型數據庫的核心內容是關係,即二維表:
常用的關係操作:查詢;插入、刪除、修改操作;
關係操作的對象是關係,操作結果也是關係;
關係操作的特點是集合操作方式,即操作的對象和結果都是集合。


3.集合操作:
選擇:
    從表中抽取出滿足給定限制條件的行
    選擇的結果是行;
    投影的結果是列;
並:
    屬於表1或者屬於表2的元組構成的集合,前提是表的屬性的順序和個數都相同
差:
    兩個表中不一樣的部分,前提是兩個表中具有相同字段(屬性名可以不同)
笛卡爾積:
    將兩個表中的元組以所有可能的方式組合起來;
    元組數量是各個表的元組數(行數據)的乘積


4.mysql服務器和客戶端
在Ubuntu安裝MySQL,要安裝
服務器 - 管理數據庫(相當於QQ後臺);
客戶端 - 一系列訪問數據和創建應用的工具(相當於QQ軟件)。


實例:
終端打開數據庫:
mysql -u root -p123456    #ser爲root,password爲123456,-p後面沒有空格


mysql> show databases;  #後面有分好表示結束
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)


圖形界面數據庫:MySQL Workbench  #點擊閃電開始運行程序






5.啓動MySQL服務器(默認是開啓的,創建客戶端與服務器的鏈接,所有都是先開啓服務器後開啓客戶端):


終端建立與服務器的鏈接:
mysql -u 用戶名 -p密碼 -h 服務器名稱 -P 端口
例:mysql -u root -p123456 


或者
mysql -u root -p 
password:123456




6.退出sql客戶端程序(斷開與mysql服務器的鏈接,退出客戶端即斷開):
quit;
\q
exit


7.清楚之前輸入的sql語句,重新開始輸入
\c


8.關閉MySQL服務器:
sudo /etc/init.d/mysql stop     #關閉mysql服務器 (需要鍵入超級用戶的密碼)
sudo /etc/init.d/mysql start  #啓動mysql服務器
mysql -u root -p     #打開客戶端,建立終端與mysql的鏈接
password:123456


實例:
yiquanchaoren@qiyu:~$ sudo /etc/init.d/mysql stop   
[sudo] tarena 的密碼: 
[ ok ] Stopping mysql (via systemctl): mysql.service.
yiquanchaoren@qiyu:~$ sudo /etc/init.d/mysql start
[ ok ] Starting mysql (via systemctl): mysql.service.
yiquanchaoren@qiyu:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.19-0ubuntu0.16.04.1 (Ubuntu)


Copyright (c) 2000, 2017, 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> 




9.查找mysql服務器的位置
yiquanchaoren@qiyu:~$ whereis mysql


實例:
mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/include/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz




10.sql(structured query language 結構化的查詢語言)寫作規範
不區分字母的大小寫(注:MySQL對錶的名字區分大小寫);
以關鍵字開頭:SELECT,INSERT,UPDATE,DELETE,ALTER,DROP,CREATE,USE,SHOW;
以分號;結尾




11.創建數據庫
CREATE DATABASE 數據庫名;
CREATE DATABASE testDB;


12.查詢已有的數據庫:
SHOW DATABASES;


實例:
mysql> CREATE DATABASE testDB;
Query OK, 1 row affected (0.00 sec)


mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testDB             |
+--------------------+
5 rows in set (0.03 sec)


bug:沒有加分號,




13.選擇數據庫:
use 數據庫名
use testDB;


實例:
mysql> use testDB
Database changed




14.創建表格
create table 表名(column1 datatype,...,columnN datatype);


15.數據類型:
字符串:
  定長 char
  不定長 varchar


數值型:
  整型 int
  定長小數 decimal 例:decimal(5,2) 123.45
  浮點型float


日期和時間


實例:
create table customers(ID INT,NAME VARCHAR(20),AGE INT,ADDRESS CHAR(25),SALARY DECIMAL(18,2));


實例:
mysql> use testDB
Database changed
mysql> create table customers(ID INT,NAME VARCHAR(20),AGE INT,ADDRESS CHAR(25),SALARY DECIMAL(18,2));
Query OK, 0 rows affected (0.04 sec)


16.查詢已有的表:
show tables


實例:
mysql> show tables;
+------------------+
| Tables_in_testDB |
+------------------+
| customers        |
+------------------+
1 row in set (0.00 sec)


17.選擇數據庫:
mysql> select * from customers;
Empty set (0.00 sec)


18.查詢已有的表
show tables;


19.查詢已有的表的各個字段(查詢使用表的所有屬性名稱和數據類型嗎)
show create table customers;


實例:
mysql> show create table customers;
+-----------+
| Table     | Create Table                                                                                                                                                                                                                             
+-----------+
| customers | CREATE TABLE `customers` (
  `ID` int(11) DEFAULT NULL,
  `NAME` varchar(20) DEFAULT NULL,
  `AGE` int(11) DEFAULT NULL,
  `ADDRESS` char(25) DEFAULT NULL,
  `SALARY` decimal(18,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |






練習:
創建數據庫:schools
使用該數據庫;
創建表students,其中字段包括:
id int,name varchar(20),gender char(20),age int
查詢當前數據庫中的所有的表格
查詢表studets中的所有屬性名稱和數據類型


sudo mysql -u root -p123456  
create database schools;
use schools;
create table student(id int,name varchar(20),gender char(20),age int)
show tables;
show create table student;


20.刪除表格
drop table 表名;


21.刪除數據庫:
drop database 數據庫名;


實例:
create database yangDB;
show databases;
use yangDB;
create table python(id int);
show tables;
drop table python;
show tables;
drop database yangDB;
show databases;




22.往表中插入數據
兩種語法:
(1)insert into 表名 (column1,column2,...,columnN) values (value1,value2,...,valueN);


(2)insert into 表名 values (value1,value2,value3,...,valueN);


實例:
insert into customers(id,name,age,address,salary) values (1,'Ann',30,'beijing',2000);


insert into customers(id,name,age,salary,address) values (2,'li',30,2000,'beijing');       #更換了屬性順序


insert into customers values (3,'jeremy',20,'shanghai',2000)




23.一次性插入N條數據:
insert into customers(ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Bob',25,'beijing',6500),(5,'aaa',25,'beijing',6500),
(6,'bbb',25,'beijing',6500),(7,'ccc',27,'beijing',6500);




24.select查詢語句:
select column1,column2,...,columnN from 表名;


(1)查詢表中所有的記錄(包含所有列);
select * from 表名;


(2)自定義查找表中的記錄信息(非所有列):
select column1,column2 from 表名;


實例:
select * from customers;
select name,age from 表名;






25.用一個表去填充另一個表:
insert into 第二個表名
(column1,column2,...,columnN) select column1,column2,...,columnN from 第一個表


實例:
create table customers_2(ID INT,NAME VARCHAR(20),AGE INT,ADDRESS CHAR(25),SALARY DECIMAL(18,2));
insert into customers_2
(ID,NAME,AGE,ADDRESS,SALARY) select ID,NAME,AGE,ADDRESS,SALARY from customers;




26.指明操作符
代數:+-*/%
比較:=,!=,<>(不等於),>,<,>=,<=,!<,!>
邏輯:ALL  ,  AND  ,  ANY  ,  BETWEEN  ,  EXISTS  ,
      IN  ,  LIKE  ,  NOT  ,  OR  ,  IS NULL  ,  UNIQUE


AND & OR:
select column1,column2,...columnN from 表名 where 條件1 and 條件2...and 條件N;
select column1,column2,...columnN from 表名 where 條件1 or 條件2...or 條件N;




27.where 條件語句(查詢,修改,刪除使用)
select column1,column2,...,columuN from 表名 where 條件;


實例:
select * from customers where name = 'Ann';


實例:
選擇customers表中,工資大於等於4000的顧客的姓名,地址,工資信息
select name,address,salary from customers where salary >= 4000;


實例:
select name,salary from customers where salary > 2000 and age <35;


練習:
查詢年齡大於24,工資大於5000或者小於3000的人的姓名,年齡,工資
select name,age,salary from customers where age > 24 and salary >5000 or salary < 3000;


select name,age,salary from customers where not(age > 24 and salary >5000 or salary < 3000);


注意:切記寫
select name,age,salary from customers where not(age > 24) and salary >5000 or salary < 3000;
結果中往往沒有實現not(age > 24) #@@@@@@@@@@@@@@@@@@@@@@@@@@@


28.查看當前庫
select database();   
實例:
mysql> select database();
+------------+
| database() |
+------------+
| schools    |
+------------+
1 row in set (0.00 sec)              


==========================================================================


練習:
創建數據庫:schools
使用該數據庫;
創建表students,其中字段包括:
id int,name varchar(20),gender char(20),age int


往表中插入幾條學生信息,要求用不同的方法進行插入:
首先插入一條數據,後同時插入多條數據,
創建一個新表叫做students_copy,
再複製students表到新表students_copy,選擇性別爲女,並且年齡大於20歲的學生,將這些學生的插入到新生成的表students_copy


提示:
insert into
select ...from
where ...and


解:
create table students(id int,name varchar(20),gender char(20),age int
);


insert into students (id,name,gender,age) values (1,'yuxiu','F',24);
insert into students values (2,'yuanchenzhi','M',22);
insert into students (age,gender,name,id) values (19,'M','zhangyu',3);
insert into students (id,name,gender,age) values (4,'limingxia','F',19),(5,'zuoting','F',21),(6,'cuillixia','F',23);


create table students_copy(id int,name varchar(20),gender char(20),age int
);


insert into students_copy (id,name,gender,age) select id,name,gender,age from students where gender ='F' and age > 20; 


執行結果:
mysql> select * from students_copy;
+------+-----------+--------+------+
| id   | name      | gender | age  |
+------+-----------+--------+------+
|    1 | yuxiu     | F        |   24 |
|    5 | zuoting   | F       |   21 |
|    6 | cuillixia | F         |   23 |
+------+-----------+--------+------+
3 rows in set (0.00 sec)


mysql> select * from students;
+------+-------------+--------+------+
| id   | name        | gender | age  |
+------+-------------+--------+------+
|    1 | yuxiu           | F         |   24 |
|    2 | yuanchenzhi | M      |   22 |
|    3 | zhangyu     | M        |   19 |
|    4 | limingxia    | F         |   19 |
|    5 | zuoting       | F         |   21 |
|    6 | cuillixia       | F        |   23 |
|    3 | zhangyu     | M        |   19 |
+------+-------------+--------+------+
7 rows in set (0.00 sec)




































































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章