MySQL語句創建表
【1】建立員工檔案表
要求字段:員工員工編號,員工姓名,性別,工資,email,入職時間,部門。
【2】合理選擇數據類型及字段修飾符,要求有NOT NULL,auto_increment, primary key等。
[sql] view plain copy
--
-- make by kakane
--
DROP TABLE IF EXISTS `workers_info`;
CREATE TABLE `workers_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`workername` varchar(20) NOT NULL,
`sex` enum(F,M,S),
`salary` int(11) DEFAULT '0',
`email` varchar(30),
`EmployedDates` date,
`department` varchar(30),
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT charset=utf-8;
mysql> alter table workers_info ADD sex enum('F','M','S');[sql] view plain copy
【3】查看表的結構
[html] view plain copy
mysql> desc workers_info;
【4】新增qq和tel字段,要求tel字段位於email前,要求入職時間是最後一個字段mysql> ALTER TABLE workers_info ADD tel varchar(15) after salary;[sql] view plain copy
mysql> ALTER TABLE workers_info ADD qq int;ALTER TABLE workers_info MODIFY EmployedDates date after qq;【5】把email字段修改成mailbox
mysql> ALTER TABLE workers_info CHANGE email mailbox varchar(30);【6】向表裏添加10條記錄
mysql> INSERT INTO workers_info values(NULL,'xing',10000,'1598232123','xing@qq.com','yanfa',736019646,20121221);[sql] view plain copy
mysql> INSERT INTO workers_info (workername,salary,tel,mailbox,department,qq,EmployedDates) values('xing',10000,'1598232123','xing@qq.com','yanfa',736019646,20121221);【7】修改其中兩條記錄的tel和mailbox
mysql> UPDATE workers_info SET mailbox = 'haha@qq.com' WHERE id = 14;[sql] view plain copy
mysql> UPDATE workers_info SET mailbox = 'haha@qq.com',tel='1246543423' WHERE id = 13;【8】查看所添加記錄
mysql> select * from workers_info;
【9】查看姓名和入職時間記錄
mysql> select workername,EmployedDates from workers_info;【10】查詢入職時間在2003年以前的
[sql] view plain copy
mysql> select * from workers_info where year(EmployedDates) < 2003;[sql]="" view="" plain="">
【11】查詢工資最高和最低的員工姓名
[sql] view plain copy
mysql> select * from workers_info ORDER BY salary limit 1;mysql> select * from workers_info ORDER BY salary desc limit 1;【12】查詢平均工資
[sql] view plain copy
mysql> select avg(salary) from workers_info;[sql] view plain copy
【13】統計男員工人數、女員工人數
[sql] view plain copy
mysql> select count(男) from workers_info where sex="M";mysql> select count(男) from workers_info where sex="M";【14】按照入職時間先後進行排序,並顯示前5位員工姓名[sql] view plain copy
mysql> select * from workers_info ORDER BY EmployedDates limit 5;
SQL與MY SQL 語言是不是通用的?
基本相同
1 MySQL支持enum,和set類型,SQL Server不支持
2 MySQL不支持nchar,nvarchar,ntext類型
3 MySQL的遞增語句是AUTO_INCREMENT,而MS SQL是identity(1,1)
4 MS SQL默認到處表創建語句的默認值表示是((0)),而在MySQL裏麵是不允許帶兩括號的
5 MySQL需要為表指定存儲類型
6 MS SQL識別符是[],[type]表示他區別於關鍵字,但是MySQL卻是 `,也就是按鍵1左邊的那個符號
7 MS SQL支持getdate()方法獲取當前時間日期,但是MySQL裏麵可以分日期類型和時間類型,獲取當前日期是cur_date(),當前完整時間是 now()函數
8 MS SQL不支持replace into 語句,但是在最新的sql20008裏麵,也支持merge語法
9 MySQL支持insert into table1 set t1 = ‘’, t2 = ‘’ ,但是MS SQL不支持這樣寫
10 MySQL支持insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)
11 MS SQL不支持limit語句,是非常遺憾的,隻能用top 取代limt 0,N,row_number() over()函數取代limit N,M
12 MySQL在創建表時要為每個表指定一個存儲引擎類型,而MS SQL隻支持一種存儲引擎
13 MySQL不支持默認值為當前時間的datetime類型(MS SQL很容易做到),在MySQL裏麵是用timestamp類型
14 MS SQL裏麵檢查是否有這個表再刪除,需要這樣:
if exists (select * from dbo.sysobjects where id = object_id(N'uc_newpm') and OBJECTPROPERTY(id,N'IsUserTable')=1)但是在MySQL裏麵隻需要 DROP TABLE IF EXISTS cdb_forums;
15 MySQL支持無符號型的整數,那麼比不支持無符號型的MS SQL就能多出一倍的最大數存儲
16 MySQL不支持在MS SQL裏麵使用非常方便的varchar(max)類型,這個類型在MS SQL裏麵既可做一般數據存儲,也可以做blob數據存儲
17 MySQL創建非聚集索引隻需要在創建表的時候指定為key就行,比如:KEY displayorder (fid,displayorder) 在MS SQL裏麵必須要:
create unique nonclustered indexindex_uc_protectedmembers_username_appid on dbo.uc_protectedmembers(username asc,appid asc)
18 MySQL text字段類型不允許有默認值
19MySQL的一個表的總共字段長度不超過65XXX。
20一個很表麵的區別就是MySQL的安裝特別簡單,而且文件大小才110M(非安裝版),相比微軟這個龐然大物,安裝進度來說簡直就是.....
21MySQL的管理工具有幾個比較好的,MySQL_front,和官方那個套件,不過都沒有SSMS的使用方便,這是MySQL很大的一個缺點。
22MySQL的存儲過程隻是出現在最新的版本中,穩定性和性能可能不如MS SQL。
23 同樣的負載壓力,MySQL要消耗更少的CPU和內存,MS SQL的確是很耗資源。
24php連接MySQL和MS SQL的方式都差不多,隻需要將函數的MySQL替換成MS SQL即可。
25MySQL支持date,time,year類型,MS SQL到2008才支持date和time。
mybatis中的sql語句中#和$的區別
1. #將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".
2. $將傳入的數據直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那麼解析成sql時的值為order by user_id, 如果傳入的值是id,則解析成的sql為order by id.
3. #方式能夠很大程度防止sql注入。
4.$方式無法防止Sql注入。
5.$方式一般用於傳入數據庫對象,例如傳入表名.
6.一般能用#的就別用$.
MyBatis排序時使用order by 動態參數時需要注意,用$而不是#
字符串替換
默認情況下,使用#{}格式的語法會導致MyBatis創建預處理語句屬性並以它為背景設置安全的值(比如?)。這樣做很安全,很迅速也是首選做法,有時你隻是想直接在SQL語句中插入一個不改變的字符串。比如,像ORDER BY,你可以這樣來使用:
ORDER BY ${columnName}
這裏MyBatis不會修改或轉義字符串。
重要:接受從用戶輸出的內容並提供給語句中不變的字符串,這樣做是不安全的。這會導致潛在的SQL注入攻擊,因此你不應該允許用戶輸入這些字段,或者通常自行轉義並檢查。
mybatis中怎麼寫sql語句
求問MY SQL語句哪裏有問題?
1.having count(*)>2
2.group by year(hiredate)
你要分別明白這兩行的作用
mybtais 怎麼輸出sql語句
顯示SQL語句部分
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
mybatis怎麼執行sql語句值
例如在一個 XXMapper.xml 中:
?
1
2
3
你可以如下調用:
?
1
sqlSession.selectList("executeSql", "select * from sysuser where enabled = 1");
或者你可以在 XXMapper.java 接口中定義如下方法:
?
1
List