my sql 的基本操作


# 關系型數據庫和非關系型數據庫

# 結構化查詢語言(Structured Query Language)簡稱SQL

# 關系型和非關系型之間的實際用處
# NOSQL非關系型數據庫小結:
#     1、NOSQL不是否定關系數據庫,而是作為關系數據庫的一個重要補充
#     2、NOSQL為了高性能、高並發而生,忽略影響高性能,高並發的功能
#     3、NOSQL典型產品memcached (純內存),redis(持久化緩存),mongodb(文檔的數據庫)
# MySQL 屬於關系型數據庫

創建數據庫的命令
create database mydb_name charset=utf8;
## 方法1,直接在dos命令行下(需要添加環境變量)
# 格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼

# 方法2: 用SET PASSWORD命令
# 首先登錄MySQL,使用mysql自帶的那個客戶端連接上mysql。
# 格式:mysql> set password for 用戶名@localhost = password('新密碼');

# 方法3:用UPDATE直接編輯那個自動的mysql庫中的user表
# 首先登錄MySQL,連接上mysql服務端。
# mysql> use mysql;   use mysql的意思是切換到mysql這個庫,
# 這個庫是所有的用戶表和權限相關的表都在這個庫里面,我們進入到這個庫才能修改這個庫里面的表。
# mysql> update user set password=password('123') where user='root' and host='localhost';   其中password=password('123') 前面的password是變量,后面的password是mysql提供的給密碼加密用的,
# 我們最好不要明文的存密碼,對吧,其中user是一個表,存着所有的mysql用戶的信息
# mysql> flush privileges #刷新
# shell>mysql -u root -p
# mysql> update user set password=password(”xueok654123″) where user=’root’;
修改mysql中的root的密碼


1 my sql 的常用命令
#  select version(),current_date;# 顯示當前mysql版本和當前日期
SQL 包含4個部分
1.1數據定義語言DDL(Data Definition Language):操作的對象時數據庫和表
常用的關鍵字   create alter drop truncate(刪除當前表再新建一個一模一樣的表結構)

# use dbname; 打開數據庫:
# create database [if not exists] db_name [character set xxx]; 創建數據庫
# use databasename; 選擇數據庫
#alter database db_name [character set xxx]
# drop database name 直接刪除數據庫,不提醒
# mysqladmin drop database name 刪除數據庫前,有提示。
# 查看當前使用的數據庫
# select database()
# mysql> flush privileges //刷新數據庫

#   創建表:create table student(
#
#       id int(4) primary key auto_increment,
#
#       name varchar(20),
#
#       score int(3)
#
#     );#varchar類型的長度是可變的,取值范圍是0-65535
# varchar類型實際占用空間為字符串的實際長度加1
# char類型的長度是固定的,在創建表時就指定了,其長度可以是0-255之間的任意值。
# 雖然char占用的空間比較大,但它的處理速度快
# alter table student rename (to) teacher; 表的重命名
# alter table student add password varchar(20); 增加字段
# alter table student change password pwd varchar(20);重命名字段 change 舊字段,新字段
# alter table student modify pwd int; 修改字段的類型
# alter table student drop pwd; 刪除一些字段

#alter table student add constraint panzhenwnei foregin key(字段)  references 父表(被關聯字段); 添加外鍵
#alter table student drop foreign key panzhenwei   刪除外鍵
# alter table tab_name add primary key(字段名稱,...) 添加主鍵

# 以表格的形式顯示結果
# desc t1;#查看表的結構
# describe t1;#上下這兩句是一樣的結果
#show columns from 表名 也可以查看表的結構

# show tables; 顯示庫中所有的表
# describe tablename; 表的詳細描述
# describe user; 顯示表mysql數據庫中user表的列信息);
# show create table 表名  # 查看當前建數據庫建立表的語句
數據定義語言DDL
1.2:數據操縱語言DML(Data Manipulation Language)對象:紀錄(行)
關鍵詞:insert update delete
# 插入:insert into student values(01,'tonbby',99); (插入所有的字段)
#       insert into student(id,name) values(01,'tonbby'); (插入指定的字段)
# #
# 更新:update student set name = 'tonbby',score = '99' where id = 01;
# #
# 刪除:delete from tonbby where id = 01;
# delete from t1 where id=1; #刪除id為1的行
# truncate table t1;數據量大,刪除速度比上一條快,且直接從零開始

# update t1 set name='sb' where id=2; #把id為2的行(記錄)中的name字段的數據改為sb;id>1;id<=1;等等都可以
# update t1 set name='sb',id=88 where id>2; #對兩個字段進行修改
# update t1 set name='sb';#如果不指定where,那么會name字段的所有數據都改成sb
數據操縱語言DML

 

1.3:數據查詢語言DQL(Data Query Language)

通過查詢語句查詢出來的也是一張表,是存放在內存中的虛擬表,可以在查詢出來的時候,對查詢的字段的名稱進行定義
# select ... from student where 條件 group by 分組字段 having 條件 order by 排序字段
# SELECT name, salary*12 AS Annual_salary FROM employee; #as + 新字段名,就是起一個別名的意思

# 執行順序:from->where->group by->having->order by->select

# select 中加上distinct去除重復字段
# select * from t1; #查看t1表中所有字段的數據,select 字段 from 表。
# select id,name from t1;#查看t1表中的id和name列的數據,其他的不看,注意格式,每個字段逗號分隔,
# select distinct 字段1,字段2..... from  表名 where 條件 group by 字段(按照這個字段進行分組)
#     having  函數  (進行篩選)
#     order by 字段 asc/desc(按照這個字段進行排序)
#     limit 0,5   表示的是從索引為0的位置開始取5條數據
#
# distinct  一定要寫在查詢的字段的前面,並且只有distinct后的所有的字段的值都一樣的時候才會去重
#where  后面可以添加的條件類型為
# 1.比較運算符:> < >= <= <> !=
# 2.between 80 and 100 值在80到100之間
# 3.in(80,90,100)  值是80或90或100
# 4.like 'egon%'   %表示任意多字符,  _表示一個字符
# 5.邏輯運算符:在多個條件直接可以使用邏輯運算符 and or not
# 6.關鍵字IS NULL(判斷某個字段是否為NULL不能用等號,需要用IS) 判斷null只能用is


# group by 可以按照任意字段分組,但是分組完畢后,比如group by post,只能查看post字段,如果想查看組內信息,或需要借助於聚合函數
# eg :如果使用了group by +post  但是在select的時候卻select 包含了其他的字段,那么在取值的時候,取到的是每個分組的第一條
# 如果想要避免這種情況出現的,可以將sql.mode設置為 ONLY_FULL_GROUP_BY,這樣再出現上面這種查法的話,會直接報錯

# mysql> select @@global.sql_mode;#查看當前的sql_mode
# 設置sql_mode
# sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,'
# 如果想要在使用group by  的時候顯示其他的字段的信息的可以可以通過使用group_concat() >>>(聚合函數,用於字符串的拼接)
#
# group by 通常和聚合函數(avg(),count()...)一起使用 ,經常先使用group by關鍵字進行分組,然后再進行集合運算。
# group by與having 一起使用,可以限制輸出的結果,只有滿足條件表達式的結果才會顯示。
# having和where的區別:
# 兩者起作用的地方不一樣,where作用於表或視圖,是表和視圖的查詢條件。having作用於分組后的記錄,用於選擇滿足條件的組。
#where > group by > having
# Having發生在分組group by之后,因而Having中可以使用分組的字段,無法直接取到其他字段,having是可以使用聚合函數

# SELECT * from employee ORDER BY age, salary DESC; #先按照age 排序,在按照salary進行排序

# ifnull()的具體作用是在查詢的時候,如果碰到了一個字段的是數據是null的的話,就把他打成某個數據進行處理,
# eg: ifnull(字段,0)表示對 是如果在這個字段中遇到了為null的數據的話,都把它當成0來處理
# null與任何數進行運算都是null

# 聚合函數

# 聚合函數聚合的是組的內容,若是沒有分組,則默認一組
# count ()   統計返回的個數
# select count(name) from employee
# count、max、min、avg、sum   #常用的聚合函數

# 使用正則表達式進行查詢
# SELECT * FROM employee WHERE name REGEXP 'on$';  #查找名字以on結尾的

# 可以對查詢的結果進行操作
# eg :SELECT name, salary*12 FROM employee; 支持四則運算
# 自定義顯示的格式
# CONCAT() 函數用於連接字符串
# SELECT CONCAT('姓名: ', name, '  年薪: ', salary * 12) AS Annual_salary  FROM employee;

# CONCAT_WS() 第一個參數為分隔符來進行字符串拼接
數據查詢語言DQL

 

1.4:數據控制語言DCL(Data Control Language)

# 數據控制語言DCL用來授予或回收訪問數據庫的某種特權,並控制數據庫操縱事務發生的時間及效果,
# 對數據庫實行監視,用戶,權限,事務等。
#
#   grant:授權,rollback:回滾。commit:提交。
數據控制語言DCL

 

 
         




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM