Mysql数据库:Mysql数据库4.1.0以前的版本不支持事务,Mysql4.1.0本身也只是对事务提供有限的支持。所以,在选择Mysql版本时,尽量选择较高版本。下面记录一下在编程和数据库管理中常用的一些Mysql命令:
一、Mysql数据库管理
1、启动Mysql数据库后,利用DOS命令窗口登录数据库:
mysql>mysql -uroot -padmin --port 3309
分别指定用户名和密码,Mysql默认运行在3306端口,如果运行在其他端口是,需要通过--port参数指定新的端口号。
2、显示所有数据库:
mysql>show databases;
3、使用数据库
mysql>use databasename; ##databasename是要使用的数据库名称
4、显示数据库中的所有表
mysql>show tables;
5、显示表的结构
mysql>desc tablename; ##tablename是要显示的表名;
6、在命令行运行sql文件:
启动数据库时运行脚本
C:\>mysql -uroot -padmin --port 3309[<D:\myapp\schema\sampledb.sql];
或者在登录Mysql后,通过source命令来运行脚本:
mysql>source D:\myapp\schema\sampledb.sql;
二、CRUD命令
1、C
创建数据库:数据库名sampledb,默认字符集采用UTF-8。
mysql>drop database if exists sampledb;
mysql>create database sampledb default character set utf8;
mysql>use sampledb;
|
创建数据库表:
创建新表 |
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) |
根据已有表创建新表 |
A:create table tab_new like tab_old B:create table tab_new as select col1,col2… from tab_old definition only
|
例:论坛登录用户表t_user,ENGINE=InnoDB指定表的引擎为InnoDB(支持事务),Mysql的默认引擎为MyISAM引擎,该引擎类型不支持事务,仅存储数据,优点是速度很快。
mysql>create table t_user(
user_id int auto_increment primary key,
user_name varchar(20),
credits int,
passwd varchar(32),
last_visit datetime,
last_ip varchar(23)
)ENGINE=InnoDB;
|
一般在实际的项目开发中,一般会有相应的用户登录日志表t_login_log来记录用户的登录信息 。
mysql>create table t_login_log(
login_log_id int auto_increment primary key,
user_id int,
login_datetime datetime,
ip varchar(23)
)ENGINE=InnoDB;
|
创建视图:create view viewname as select statement
创建索引:create [unique] index idxname on tabname(col….) 注:索引是不可更改的,想更改必须删除重新建立。
2、U
insert:mysql>insert into t_user(user_name,passwd) values('admin','admin');
mysql>commit;
增加一个列:Alter table tabname add column col type; 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
添加主键:Alte table tabname add primary key(col);
修改表数据:update tabname set field1=value1 where 条件
3、R
操作 |
命 令 |
选择 |
select * from table1 where 范围 |
插入 |
insert into table1(field1,field2) values(value1,value2) |
删除 |
delete from table1 where 范围
|
更新 |
update table1 set field1=value1 where 范围 |
查找 |
select * from table1 where field1 like ’%value1%’
|
排序 |
select * from table1 order by field1,field2 [desc] |
总数 |
select [distinct] count as totalcount from table1
|
求和 |
select sum(field1) as sumvalue from table1 |
平均 |
select avg(field1) as avgvalue from table1 |
最大
最小
|
select max(field1) as maxvalue from table1
select min(field1) as minvalue from table1
|
4、D(Delete)
删除数据库:drop database dbname;
删除表:drop table tabname ;##删除表结构
delete table tabname [where 范围];
Truncate table tabname;
truncate delete drop的区别
1. truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动,显然drop语句将表所占用的空间全部释放 . truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop> truncate > delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.
6.使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
|
删除主键:Alter table tabname drop primary key(col);
删除索引:drop index idxname;
删除视图:drop view viewname;
三、几个高级查询运算词
1、 UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。 当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来 自 TABLE2。
SELECT * FROM students WHERE name like ‘张%’ UNION [ALL] SELECT * FROM students WHERE name like ‘李%’ |
2、 EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
3、 INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
四、多表查询
1.内连接
select g.sno,s.name,c.coursename
from grades g JOIN students s ON g.sno=s.sno
JOIN courses c ON g.cno=c.cno(注意可以引用别名)
2.外连接
a.左连接:结果集几包括连接表的匹配行,也包括左连接表的所有行。
select courses.cno,max(coursename),count(sno)
from courses LEFT JOIN grades ON courses.cno=grades.cno
group by courses.cno
左连接特点:显示全部左边表中的所有项目,即使其中有些项中的数据未填写完全。
左外连接返回那些存在于左表而右表中却没有的行,再加上内连接的行。
b.右连接:结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
与左连接类似
c.全连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
select sno,name,major
from students FULL JOIN majors ON students.mno=majors.mno
两边表中的内容全部显示
d.自身连接
select c1.cno,c1.coursename,c1.pno,c2.coursename
from courses c1,courses c2 where c1.pno=c2.cno
采用别名解决问题。
e.交叉连接
select lastname+firstname from lastname CROSS JOIN firstanme
相当于做笛卡儿积
五、其他操作
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"' where..
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
六、技巧
1、1=1,1=2的使用,在SQL语句组合时用的较多
“where 1=1” 是表示选择全部 “where 1=2”全部不选, 如:
if @strWhere !='' begin set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere end else begin set @strSQL = 'select count(*) as Total from [' + @tblName + ']' end 我们可以直接写成 set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere
|
2、收缩数据库
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE
3、压缩数据库
dbcc shrinkdatabase(dbname)
4、转移数据库给新用户以已存在用户权限
exec sp_change_users_login 'update_one','newname','oldname'
go
5、检查备份集
RESTORE VERIFYONLY from disk='E:dvbbs.bak'
6、修复数据库
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO
7、日志清除
SET NOCOUNT ON DECLARE @LogicalFileName sysname, @MaxMinutes INT, @NewSize INT USE tablename -- 要操作的数据库名 SELECT @LogicalFileName = 'tablename_log', -- 日志文件名 @MaxMinutes = 10, -- Limit on time allowed to wrap log. @NewSize = 1 -- 你想设定的日志文件的大小(M) -- Setup / initialize DECLARE @OriginalSize int SELECT @OriginalSize = size FROM sysfiles WHERE name = @LogicalFileName SELECT 'Original Size of ' + db_name() + ' LOG is ' + CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB' FROM sysfiles WHERE name = @LogicalFileName CREATE TABLE DummyTrans (DummyColumn char (8000) not null) DECLARE @Counter INT, @StartTime DATETIME, @TruncLog VARCHAR(255) SELECT @StartTime = GETDATE(), @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY' DBCC SHRINKFILE (@LogicalFileName, @NewSize) EXEC (@TruncLog) -- Wrap the log if necessary. WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) AND (@OriginalSize * 8 /1024) > @NewSize BEGIN -- Outer loop. SELECT @Counter = 0 WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000)) BEGIN -- update INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans SELECT @Counter = @Counter + 1 END EXEC (@TruncLog) END SELECT 'Final Size of ' + db_name() + ' LOG is ' + CONVERT(VARCHAR(30),size) + ' 8K pages or ' + CONVERT(VARCHAR(30),(size*8/1024)) + 'MB' FROM sysfiles WHERE name = @LogicalFileName DROP TABLE DummyTrans SET NOCOUNT OFF
|
8、说明:更改某个表
exec sp_changeobjectowner 'tablename','dbo'
9、存储更改全部表
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch @OldOwner as NVARCHAR(128), @NewOwner as NVARCHAR(128) AS DECLARE @Name as NVARCHAR(128) DECLARE @Owner as NVARCHAR(128) DECLARE @OwnerName as NVARCHAR(128) DECLARE curObject CURSOR FOR select 'Name' = name, 'Owner' = user_name(uid) from sysobjects where user_name(uid)=@OldOwner order by name OPEN curObject FETCH NEXT FROM curObject INTO @Name, @Owner WHILE(@@FETCH_STATUS=0) BEGIN if @Owner=@OldOwner begin set @OwnerName = @OldOwner + '.' + rtrim(@Name) exec sp_changeobjectowner @OwnerName, @NewOwner end -- select @name,@NewOwner,@OldOwner FETCH NEXT FROM curObject INTO @Name, @Owner END close curObject deallocate curObject GO |
10
、SQL SERVER中直接循环写入数据
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
小记存储过程中经常用到的本周,本月,本年函数
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)
Dateadd(mm,datediff(mm,0,getdate()),0)
Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))
Dateadd(yy,datediff(yy,0,getdate()),0)
Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
上面的SQL代码只是一个时间段
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)
就是表示本周时间段.
下面的SQL的条件部分,就是查询时间段在本周范围内的:
Where Time BETWEEN Dateadd(wk,datediff(wk,0,getdate()),-1) AND Dateadd(wk,datediff(wk,0,getdate()),6)
而在存储过程中
select @begintime = Dateadd(wk,datediff(wk,0,getdate()),-1)
select @endtime = Dateadd(wk,datediff(wk,0,getdate()),6)
最后,再补充一些:
分组group
常用于统计时,如分组查总数:
select gender,count(sno)
from students
group by gender
(查看男女学生各有多少)
注意:从哪种角度分组就从哪列"group by"
对于多重分组,只需将分组规则罗列。比如查询各届各专业的男女同学人数 ,那么分组规则有:届别(grade)、专业(mno)和性别(gender),所以有"group by grade, mno, gender"
select grade, mno, gender, count(*)
from students
group by grade, mno, gender
通常group还和having联用,比如查询1门课以上不及格的学生,则按学号(sno)分类有:
select sno,count(*) from grades
where mark<60
group by sno
having count(*)>1
最后、看一下MSSQL的备份
--- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack
|
分享到:
相关推荐
在本文中,我们将深入探讨MySQL的常用命令、增删改查语句以及数据类型。 首先,了解MySQL的基本命令是至关重要的。例如,`SELECT DATABASE()`用于查看当前选择的数据库。创建数据表的命令是`CREATE TABLE`,其中...
本文将介绍一些基础和常用的MySQL命令,涵盖数据库管理、表操作、数据增删改查(CRUD操作)以及用户权限管理。 首先,连接到MySQL服务器是所有操作的起点。本地连接可以通过`mysql -u 用户名 -p`命令实现,远程连接...
本文将深入讲解MySQL的一些基本命令,帮助读者理解和掌握数据库的日常操作。 首先,我们来查看MySQL的版本。在命令行中输入`mysql --version`,可以显示当前安装的MySQL服务器的版本信息。 接着,我们需要登录到...
标题提到的"C# MySQL链接数据库常用类库"主要指的是`MySql.Data.dll`和`MySQLDriverCS.dll`这两个重要的组件。下面将详细讲解这两个类库以及如何在C#中使用它们来实现MySQL数据库的连接和操作。 首先,`MySql.Data....
在Linux系统中,MySQL是一种广泛使用的开源关系型数据库管理系统,其...熟悉这些命令能够帮助你更有效地管理和维护MySQL数据库。当然,实际环境中还有很多其他高级特性和复杂的操作,需要通过学习和实践来进一步掌握。
在本篇文章中,我们将深入探讨MySQL数据库的基本操作,包括数据的增、删、改、查(CRUD)以及一些核心概念。 1. **安装与配置**: 安装MySQL通常涉及下载安装包,按照向导进行安装,并设置root用户的密码。在...
以下是一份详细的速查手册,涵盖了MySQL常用语句和高级功能。 ### 1. MySQL常用语句 #### (1) CRUD操作 - **创建(Create)**: 使用`CREATE TABLE`语句创建新表。例如: ```sql CREATE TABLE customers ( cust_...
附录一可能包含一些补充信息,如常用MySQL命令速查、错误代码解释或资源链接,以供参考。 通过这套经典培训材料,读者将能够系统地学习MySQL,无论你是初次接触还是希望进一步提升技能,都能从中受益。每个章节都...
2. 命令行界面:使用MySQL客户端进行连接、断开、查询和管理数据库的命令。 3. CRUD操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据的基本方法。 4. 数据库设计:介绍关系型数据库的基本...
3. **MySQL命令**:“mysql常用命令.txt”涵盖了诸如CREATE DATABASE和USE命令来创建和切换数据库,CREATE TABLE用于定义数据表结构,ALTER TABLE用于修改表结构,以及DROP命令用于删除数据库或表等常用命令。...
了解事务的BEGIN、COMMIT和ROLLBACK命令,以及如何处理死锁,是数据库管理员必备的知识。 视图是虚拟表,它根据查询结果动态生成,提供了一种简化复杂查询和保护数据隐私的方法。你可以创建视图,然后像操作普通表...
本书的附录部分列出了学习MySQL常用的英文单词,帮助读者更好地理解专业术语。同时,书中还包含了作者和贡献者的致谢,以及版权声明和免责声明,阐明了文档的开源特性和作者对于知识共享的理念。 总而言之,这本书...
对于MySQL数据库,EF(Entity Framework)是常用的ORM(对象关系映射)框架,它允许开发者以面向对象的方式操作数据库,而无需编写SQL语句。然而,要使EF与MySQL配合工作,就需要MySQL Connector/Net作为中间件来...
例如,`MySqlConnection` 类用于建立和管理到MySQL服务器的连接,`MySqlCommand` 类则用于执行SQL命令,而`MySqlDataReader` 类则用于读取查询结果。此外,还有`MySqlDataAdapter`和`DataSet`等类用于数据填充和更新...
`.tar.gz`文件格式是Unix/Linux环境中常用的归档和压缩方式,我们可以使用相应的工具(如tar和gzip命令,或者在Windows上的7-Zip)来解压它。 解压后,你会得到一个名为`mysql-connector-java-8.0.26`的目录,里面...
附录通常包含补充信息,可能是参考手册、常用命令速查表或MySQL的其他重要资源链接。 总的来说,这份“MYSQL培训经典教程”是一份全面的学习资料,适合初学者和有一定经验的开发者。通过学习,读者将能够熟练掌握...
12. **备份和恢复**:mysqldump工具用于备份数据库,而mysql命令可以用来恢复备份数据。 13. **性能优化**:包括索引优化、查询优化、内存配置优化等,以提高MySQL的运行效率。 14. **复制和集群**:MySQL复制允许...
在MySQL数据库中,增删改查(CRUD:Create, Read, Update, Delete)是基本的操作,对于数据管理至关重要。以下是这些操作的简要介绍: 1. 创建(Create):创建数据库和表。例如,使用`CREATE DATABASE`命令创建...
MySQL就是一种常用的DBMS,用于管理和操作数据库。 1.2 常见的数据库管理系统 常见的数据库管理系统有Oracle、MySQL、SQL Server、PostgreSQL、DB2和SQLite等。其中,Oracle是大型收费数据库,MySQL是开源免费的中...