所遗失的天数。
DATE_FORMAT(date,format)
依照 format 字符串格式化 date 值。下面的修饰符可被用于 format 字符串中: 修饰符 含义
%M 月的名字 (January..December) %W 星期的名字 (Sunday..Saturday)
%D 有英文后缀的某月的第几天 (0th, 1st, 2nd, 3rd, etc.) %Y 年份,数字的,4 位 %y 年份,数字的,2 位
%X 周值的年份,星期日是一个星期的第一天,数字的,4 位,与 ‘%V’ 一同使用 %x 周值的年份,星期一是一个星期的第一天,数字的,4 位,与 ‘%v’ 一同使用 %a 缩写的星期名 (Sun..Sat)
%d 月份中的天数,数字的 (00..31) %e 月份中的天数,数字的 (0..31) %m 月,数字的 (00..12) %c 月,数字的 (0..12)
%b 缩写的月份名 (Jan..Dec) %j 一年中的天数 (001..366) %H 小时 (00..23) %k 小时 (0..23) %h 小时 (01..12) %I 小时 (01..12) %l 小时 (1..12)
%i 分钟,数字的 (00..59)
%r 时间,12 小时 (hh:mm:ss [AP]M) %T 时间,24 小时 (hh:mm:ss) %S 秒 (00..59) %s 秒 (00..59) %p AM 或 PM
%w 一周中的天数 (0=Sunday..6=Saturday)
%U 星期 (00..53),星期日是一个星期的第一天 %u 星期 (00..53),星期一是一个星期的第一天
%V 星期 (01..53),星期日是一个星期的第一天。与 ‘%X’ 一起使用 %v 星期 (01..53),星期一是一个星期的第一天。与 ‘%x’ 一起使用 %% 一个字母 “%”
所有其它的字符不经过解释,直接复制到结果中:
mysql> SELECT DATE_FORMAT(’1997-10-04 22:23:00′, ‘%W %M %Y’); -> ‘Saturday October 1997′
mysql> SELECT DATE_FORMAT(’1997-10-04 22:23:00′, ‘%H:%i:%s’); -> ‘22:23:00′
mysql> SELECT DATE_FORMAT(’1997-10-04 22:23:00′, ‘%D %y %a %d %m %b %j?); -> ‘4th 97 Sat 04 10 Oct 277′
mysql> SELECT DATE_FORMAT(’1997-10-04 22:23:00′,
‘%H %k %I %r %T %S %w?);
-> ‘22 22 10 10:23:00 PM 22:23:00 00 6′
mysql> SELECT DATE_FORMAT(’1999-01-01′, ‘%X %V’); -> ‘1998 52′
在 MySQL 3.23 中,在格式修饰符前需要字符 `%’。在更早的 MySQL 版本中,`%’ 是可选的。 月份与天修饰符的范围从零开始的原因是,在 MySQL 3.23 中,它允许存储不完善的日期值(例如 ‘2004-00-00′)。 TIME_FORMAT(time,format)
它的使用方法与上面的 DATE_FORMAT() 函数相似,但是 format 字符串只包含处理小时、分和秒的那些格式修饰符。使用其它的修饰符会产生一个 NULL 值或 0。 CURDATE()
CURRENT_DATE
以 ‘YYYY-MM-DD’ 或 YYYYMMDD 格式返回当前的日期值,返回的格式取决于该函数是用于字符串还是数字语境中: mysql> SELECT CURDATE(); -> ‘1997-12-15′
mysql> SELECT CURDATE() + 0; -> 19971215 CURTIME()
CURRENT_TIME
以 ‘HH:MM:SS’ 或 HHMMSS 格式返回当前的时间值,返回的格式取决于该函数是用于字符串还是数字语境中: mysql> SELECT CURTIME(); -> ‘23:50:26′
mysql> SELECT CURTIME() + 0; -> 235026 NOW() SYSDATE()
CURRENT_TIMESTAMP
以 ‘YYYY-MM-DD HH:MM:SS’ 或 YYYYMMDDHHMMSS 格式返回当前的日期时间值,返回的格式取决于该函数是用于字符串还是数字语境中: mysql> SELECT NOW(); -> ‘1997-12-15 23:50:26′ mysql> SELECT NOW() + 0; -> 19971215235026
注意,函数 NOW() 在每个查询中只计算一次,也就是在查询开始执行时。这就是说,如果在一个单独的查询中多次引用了 NOW(),它只会给出值都是一个相同的时间。 UNIX_TIMESTAMP() UNIX_TIMESTAMP(date)
如果调用时没有参数,以无符号的整数形式返回一个 Unix 时间戳(从 ‘1970-01-01 00:00:00′ GMT 开始的秒数)。如果以一个参数 date 调用 UNIX_TIMESTAMP(),它将返回该参数值从 ‘1970-01-01 00:00:00′ GMT 开始经过的秒数值。date 可以是一个 DATE 字符串,一个 DATETIME 字符串,一个 TIMESTAMP,或者以一个 YYMMDD 或 YYYYMMDD 显示的本地时间:
mysql> SELECT UNIX_TIMESTAMP(); -> 882226357
mysql> SELECT UNIX_TIMESTAMP(’1997-10-04 22:23:00′); -> 875996580
当 UNIX_TIMESTAMP 被用于一个 TIMESTAMP 列时,函数直接返回一个内部的时间戳值,而不进行一个隐含地 “string-to-unix-timestamp” 转换。如果你传递一个超出范围的日期参数给 UNIX_TIMESTAMP() ,它将返回 0,但是请注意,MySQL 对其仅仅进行基本的检验(年范围 1970-2037,月份 01-12,日期 01-31)。 如果你希望减去 UNIX_TIMESTAMP() 列,你应该需要将结果强制转换为一有符号整数。查看章节 6.3.5 Cast 函数。
FROM_UNIXTIME(unix_timestamp [,format])
以 ‘YYYY-MM-DD HH:MM:SS’ 或 YYYYMMDDHHMMSS 格式返回一个 unix_timestamp 参数值,返回值的形式取决于该函数使用于字符串还是数字语境。 如果 format 给出,返回值依 format 字符串被格式。format 可以包含与 DATE_FORMAT() 函数同样的修饰符。
mysql> SELECT FROM_UNIXTIME(875996580); -> ‘1997-10-04 22:23:00′
mysql> SELECT FROM_UNIXTIME(875996580) + 0; -> 19971004222300
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), ‘%Y %D %M %h:%i:%s %x?);
-> ‘1997 23rd December 03:43:30 1997′ SEC_TO_TIME(seconds)
以 ‘HH:MM:SS’ 或 HHMMSS 格式返回参数 seconds 被转换到时分秒后的值,返回值的形式取决于该函数使用于字符串还是数字语境: mysql> SELECT SEC_TO_TIME(2378); -> ‘00:39:38′
mysql> SELECT SEC_TO_TIME(2378) + 0; -> 3938
TIME_TO_SEC(time)
将参数 time 转换为秒数后返回:
mysql> SELECT TIME_TO_SEC(’22:23:00′); -> 80580
mysql> SELECT TIME_TO_SEC(’00:39:38′); -> 2378
如何解决MYSQL数据库中文乱码问题? 在数据库安的时候指定字符集
如果在安完了以后可以更改以下文件:
C:\\Program Files\\MySQL\\MySQL Server 5.0\\my.ini 里的所有的 default-character-set=gbk
C:\\Program Files\\MySQL\\MySQL Server 5.0\\data\\depot_development\\db.opt default-character-set=gbk
default-collation=gbk_chinese_ci 建立数据库时候:指定字符集类型
CREATE DATABASE haichen CHARACTER SET ?gbk? COLLATE ?gbk_chinese_ci?; 2.建表的时候 也指定字符集 CREATE TABLE student (
ID varchar(40) NOT NULL default ”, UserID varchar(40) NOT NULL default ”,
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
————————————————————————————————————- 1。创建数据库的时候:CREATE DATABASE `database` CHARACTER SET ‘utf8′ COLLATE ?utf8_general_ci?;
2.建表的时候 CREATE TABLE `database_user` ( `ID` varchar(40) NOT NULL default ”, `UserID` varchar(40) NOT NULL default ”,
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 3.设置URL的时候
jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8
如何提高MySql的安全性?
1.如果MYSQL客户端和服务器端的连接需要跨越并通过不可信任的网络,那么需要使用ssh隧道来加密该连接的通信。
2.使用set password语句来修改用户的密码,先“mysql -u root”登陆数据库系统,然后“mysql> update mysql.user set password=password(’newpwd’)”,最后执行“flush privileges”就可以了。
3.Mysql需要提防的攻击有,防偷听、篡改、回放、拒绝服务等,不涉及可用性和容错方面。对所有的连接、查询、其他操作使用基于acl即访问控制列表的安全措施来完成。也有一些对ssl连接的支持。
4.设置除了root用户外的其他任何用户不允许访问mysql主数据库中的user表;
加密后存放在user表中的加密后的用户密码一旦泄露,其他人可以随意用该用户名/密码相应的数据库;
5.使用grant和revoke语句来进行用户访问控制的工作;
6.不要使用明文密码,而是使用md5()和sha1()等单向的哈系函数来设置密码; 7.不要选用字典中的字来做密码;
8.采用防火墙可以去掉50%的外部危险,让数据库系统躲在防火墙后面工作,或放置在dmz区域中;
9.从因特网上用nmap来扫描3306端口,也可用telnet server_host 3306的方法测试,不允许从非信任网络中访问数据库服务器的3306号tcp端口,需要在防火墙或路由器上做设定; 10.为了防止被恶意传入非法参数,例如where id=234,别人却输入where id=234 or 1=1导致全部显示,所以在web的表单中使用”或”\来用字符串,在动态url中加入"代表双引号、#代表井号、'代表单引号;传递未检查过的值给mysql数据库是非常危险的; 11.在传递数据给mysql时检查一下大小;
12.应用程序需要连接到数据库应该使用一般的用户帐号,开放少数必要的权限给该用户; $page_devide$
13.在各编程接口(c c++ php perl java jdbc等)中使用特定‘逃脱字符’函数;
在因特网上使用mysql数据库时一定少用传输明文的数据,而用ssl和ssh的加密方式数据来传输;
14.学会使用tcpdump和strings工具来查看传输数据的安全性,例如tcpdump -l -i eth0 -w -src or dst port 3306 strings。以普通用户来启动mysql数据库服务; 15.不使用到表的联结符号,选用的参数 –skip-symbolic-links;
16.确信在mysql目录中只有启动数据库服务的用户才可以对文件有读和写的权限;
17.不许将process或super权限付给非管理用户,该mysqladmin processlist可以列举出当前执行的查询文本;super权限可用于切断客户端连接、改变服务器运行参数状态、控制拷贝复制数据库的服务器;
18.file权限不付给管理员以外的用户,防止出现load data ‘/etc/passwd’到表中再用select 显示出来的问题;
19.如果不相信dns服务公司的服务,可以在主机名称允许表中只设置ip数字地址; 20.使用max_user_connections变量来使mysqld服务进程,对一个指定帐户限定连接数; 21.grant语句也支持资源控制选项;
22.启动mysqld服务进程的安全选项开关,–local-infile=0或1 若是0则客户端程序就无法使用local load data了,赋权的一个例子grant insert(user) on mysql.user to ‘user_name’@'host_name’;若使用–skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用 mysqladmin flush-privileges或mysqladmin reload来开启访问控制;默认情况是show databases语句对所有用户开放,可以用–skip-show-databases来关闭掉。
23.碰到error 1045(28000) access denied for user ‘root’@'localhost’ (using password:no)错误时,你需要重新设置密码,具体方法是:先用–skip-grant-tables参数启动mysqld,然后执行 mysql -u root mysql,mysql>update user set password=password(’newpassword’) where user=’root’;mysql>flush privileges;,最后重新启动mysql就可以了。
MySQL面试题
1、MySQL取得当前时间的函数是?,格式化日期的函数是 2、写出 SQL语句的格式 : 插入 ,更新 ,删除 表名User
Name Tel Content Date
张三 13333663366 大专毕业 2006-10-11 张三 13612312331 本科毕业 2006-10-15 张四 021-55665566 中专毕业 2006-10-15
(a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中 (b) 请用sql语句把张三的时间更新成为当前系统时间 (c) 请写出删除名为张四的全部记录
3、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别 4、MySQL自增类型(通常为表ID字段)必需将其设为(?)字段 5、以下请用PHPMYADMIN完成
(一)创建新闻发布系统,表名为message有如下字段 id 文章id title 文章标题 content 文章内容
category_id 文章分类id
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库MySQL最新最全面试题和答案(2)在线全文阅读。
相关推荐: